有型号,有has_many through
协会:如何在has_many的情况下通过关联来验证关联记录的存在?
class Event < ActiveRecord::Base
has_many :event_categories
has_many :categories, through: :event_categories
validates :categories, presence: true
end
class EventCategory < ActiveRecord::Base
belongs_to :event
belongs_to :category
validates_presence_of :event, :category
end
class Category < ActiveRecord::Base
has_many :event_categories
has_many :events, through: :event_categories
end
的问题是与分配event.categories = []
- 它立即从event_categories
删除行。因此,以前的关联被不可逆转地销毁,并且一个事件变得无效。
如何在has_many, through:
的情况下验证记录的存在?
UPD:请在回答前仔细阅读标记为加粗的句子。 的Rails 4.2.1
从docs - '验证关联的对象或对象是否全部有效'和'如果关联尚未分配,此验证将不会失败。如果您想确保该关联既存在也可以保证有效,则还需要使用validates_presence_of。'。但是,即使将“validates_presence_of:categories”和“validates_associated:categories”组合在一起,也不会阻止在分配“event”时从“event_categories”表中立即删除。分类= []' – yurko