我遇到一个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
谢谢!
答案 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