Dan*_*ero 7 ruby-on-rails ruby-on-rails-3.2 rails-activerecord
鉴于我有下一个型号:
user.rb
has_many :favorites, dependent: :destroy
has_many :sports, through: :favorites
Run Code Online (Sandbox Code Playgroud)
sport.rb
has_many :favorites, dependent: :destroy
has_many :users, through: :favorites
Run Code Online (Sandbox Code Playgroud)
在创建新用户的表单中,有一个体育复选框列表,在用户验证中我想验证至少选择了一个.
我是这样做的:
在用户控制器中创建操作:
@user = User.new(params[:user])
@user.sports << Sport.find(params[:sports]) unless params[:sports].nil?
if @user.save ...
Run Code Online (Sandbox Code Playgroud)
在用户模型中
validate :user_must_select_sport
def user_must_select_sport
if sports.empty?
errors.add(:Sport, "You have to select at least 1 sport")
end
end
Run Code Online (Sandbox Code Playgroud)
它确实有效,但我猜它必须是一个更好的方法.我很感激任何帮助.
你可以使用"validates_presence_of"
class User < ActiveRecord::Base
has_many :sports
validates_presence_of :sports
end
Run Code Online (Sandbox Code Playgroud)
但是有一个bug吧,如果你会使用accepts_nested_attributes_for同:allow_destroy => true.
您可以看一下:嵌套模型和父验证
| 归档时间: |
|
| 查看次数: |
5952 次 |
| 最近记录: |