2012-07-04 61 views
4

這是我的問題的一個例子。如何驗證Rails 3.2中父模型範圍內嵌套模型的唯一性?

我有一個「房間」模式:

class Room < ActiveRecord::Base 
    has_many :items, :inverse_of => :room 
    accepts_nested_attributes_for :items 
end 

而且我有一個「項目」的模式:

class Item < ActiveRecord::Base 
    belongs_to :room, :inverse_of => :items 
    validates :some_attr, :uniqueness => { :scope => :room} 
end 

我想驗證的獨特性:所有的項目some_attr屬性屬於某個房間。

當我試圖驗證的項目,我得到這個錯誤:

TypeError (Cannot visit Room) 

我不能設置驗證的範圍是:ROOM_ID由於項目尚未保存,以便標識爲零。我也想阻止在'房間'模型中使用自定義驗證器。

有沒有乾淨的方式來做到這一點在Rails中?我也想知道,如果我正確設置:inverse_of選項...

回答

2

我沒有看到你如何使用inverse_of

對於這個問題,在類似的情況下,我最終迫使唯一性約束中遷移,像這樣

add_index :items, [ :room_id, :some_attr ], :unique => true 

這是除了AR級的驗證

validates_uniqueness_of :some_attr, :scope => :room_id 

(我不確定使用關聯名稱作爲示波器是否有效,在嘗試引用查詢中不存在的room列時,DB適配器是否會引發異常?)

+0

U不幸的是,由於軌道中的錯誤,這不適用於嵌套屬性。 – maletor

相關問題