7

鉴于我有下一个模型:

用户.rb

has_many :favorites, dependent: :destroy
has_many :sports, through: :favorites

运动.rb

has_many :favorites, dependent: :destroy
has_many :users, through: :favorites

在创建新用户的表单中,有一个运动复选框列表,在用户验证中,我想验证是否至少选择了一个。

我这样做是这样的:

在用户控制器中创建操作:

@user = User.new(params[:user])
@user.sports << Sport.find(params[:sports]) unless params[:sports].nil?

if @user.save ...

在用户模型中

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

它实际上是有效的,但我猜它必须是一种更好的方法。我会很感激任何帮助。

4

1 回答 1

8

您可以使用“validates_presence_of”

class User < ActiveRecord::Base
  has_many :sports
  validates_presence_of :sports
end

但是如果你要使用accepts_nested_attributes_forwith的话,会有一个错误:allow_destroy => true

你可以看看这个:嵌套模型和父验证

于 2013-01-27T15:02:14.503 回答