0

我有以下型号

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
4

2 回答 2

1

可能有多种方法可以实现这一点,但我建议您查看Custom ValidationsActiveRecord Callbacks

于 2012-12-19T17:09:58.010 回答
0

您可以查看validates_existence gem。这个 gem 对我验证外键是否对应于合法的父记录非常有用。如自述文件中所述:

这个插件库添加了 ActiveRecord 模型,以检查保存时是否存在 :belongs_to 关联。

于 2012-12-19T16:57:31.057 回答