【问题标题】:Validation on a has_many relationship in rails 3.2在 rails 3.2 中验证 has_many 关系
【发布时间】:2013-01-10 23:15:38
【问题描述】:

鉴于我有下一个模型:

用户.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

它确实有效,但我猜它必须是一种更好的方法。如有任何帮助,我将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3.2 rails-activerecord


    【解决方案1】:

    您可以使用“validates_presence_of”

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

    但是如果您将accepts_nested_attributes_for:allow_destroy =&gt; true 一起使用,则会出现错误。

    你可以看看这个:Nested models and parent validation

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2011-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-21
      相关资源
      最近更新 更多