如果has_many子项无效,则引发验证错误

时间:2015-01-14 10:31:56

标签: ruby-on-rails activerecord has-many

我遇到一个has_many关联的问题,在所有孩子都不知情之前不应该验证。

设置

rails g scaffold Hotel name
rails g scaffold RoomCategory name hotel:references

应用/模型/ hotel.rb

class Hotel < ActiveRecord::Base
  has_many :room_categories, dependent: :destroy

  accepts_nested_attributes_for :room_categories,
                                :reject_if => 
                                proc {|attributes| attributes['name'].blank?},
                                allow_destroy: true
end

应用/模型/ room_category.rb

class RoomCategory < ActiveRecord::Base
  belongs_to :hotel

  validates :name,
            presence: true,
            uniqueness: { scope: :hotel }
end

这个想法是,给定的hotel不能有两个room_categories具有相同的名称。

问题

如何确保以下hotel示例无法验证是否为真?

>> hotel = Hotel.new(name: 'Example')
>> hotel.room_categories.build(name: 'Suite')
>> hotel.room_categories.build(name: 'Suite')
>> hotel.save
>> hotel.valid?
=> true

谢谢!

2 个答案:

答案 0 :(得分:0)

试试这个..

accepts_nested_attributes_for :room_categories, :reject_if => lambda { |a|  a[:name].blank?  }, :allow_destroy => true

答案 1 :(得分:0)

由“ validate”选项控制的关联选项的验证。 因此,您可以:

has_many:room_categories,从属::destroy,验证:false