2012-12-19 87 views
0

的存在,我有以下型號驗證一個HABTM模型關係

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

您可以查看validates_existence寶石。這個寶石對我來說非常有用,用於驗證外鍵是否對應於合法的父記錄。由於在自述中描述:

This plugin library adds ActiveRecord models a way to check if a :belongs_to association actually exists upon saving.

+0

謝謝,但我需要驗證存在的HATBM協會 – AlexBrand