我有一个新手铁路问题。我正在尝试通过HABTM关系确保模型至少有一个关联。基本上我已经创建了以下验证:
validate :has_tags?
def has_tags?
errors.add(:base, 'Must have at least one tag.') if self.tags.blank?
end
我创建新记录时工作正常。问题是,当我采用模型并尝试删除关联时,执行以下操作:
tag = Tag.find(params[:tag_id])$
@command.tags.delete(tag)$
允许,即关联将被删除。基于我对HABTM关联(http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association)的阅读,我应该“使用has_many:如果你需要验证,回调或连接模型上的额外属性。”
我想我的问题是如何对.delete方法进行关联验证。我应该在调用delete时手动执行此操作(即,在执行删除操作之前运行单独的连接来计算关联数),还是有办法在删除时使用验证模型?这是我的模特:
class Command < ActiveRecord::Base
has_many :tagmapsorters
has_many :tags, through: :tagmapsorters
validates :text, presence: true
validates :description, presence: true
validates :text, uniqueness: true
validate :has_tags?
def has_tags?
errors.add(:base, 'Must have at least one tag.') if self.tags.blank?
end
end
感谢您抽出宝贵时间帮助我。
丹
答案 0 :(得分:1)
您需要的任何回调都应该在连接模型before_destroy
上注册为after_destroy
(用于验证)或Tagmapsorter
(用于清除),因为这是实际存在的记录破坏。