我有以下型号
class Business < ActiveRecord::Base
has_and_belongs_to_many :categories
validates_presence_of :category_ids
end
class Category < ActiveRecord::Base
has_and_belongs_to_many :businesses
end
我使用category_ids
属性通过业务创建表单设置关系。
我尝试使用validates_presence_of
,但是,这并未验证是否存在类别。
我可以通过浏览器操作表单,为类别提供不存在的ID。提交表单后,我收到错误:
Couldn't find Category with id=181723
编辑:
添加了以下自定义验证方法,但我仍然收到相同的错误,就好像未运行验证一样。
class Business < ActiveRecord::Base
has_and_belongs_to_many :categories
validate :categories_exist
def categories_exist
category_ids.each do |c|
errors.add(:category_ids, :category_doesnt_exist) unless Category.exists? c
end
end
end
答案 0 :(得分:1)
您可能有多种方法可以实现这一目标,但我建议您查看Custom Validations和ActiveRecord Callbacks。
答案 1 :(得分:0)
您可以查看validates_existence宝石。这个gem对我来说非常有用,可以验证外键是否与合法的父记录相对应。如自述文件中所述:
这个插件库添加了ActiveRecord模型,以检查是否有 :belongs_to关联实际上在保存时存在。