我有兩個型號軌accepts_nested_attributes_for和驗證... Rails的2.3.11
class Group < AR
has_many :permissions
accepts_nested_attributes_for :permissions, :allow_destroy => true
end
class Permission < AR
validates_uniqueness_of :action, :scope => [:role]
end
我似乎無法得到許可的唯一約束只在更新創建新組時,工作。這是一個示例輸出。有誰知道驗證工作嵌套屬性和唯一約束的最佳方法嗎?
樣本輸出
> g = Group.create(:permissions_attributes => [{:role => 'admin', :action => 'one'}])
> # Now add the same permissions, should not be valid
> g.permissions_attributes = [{:role => 'admin', :action => 'one'}]
> g.valid? # => false
即預計。但是,如果我用同樣permissions_attributes創建組的兩倍,它並不否定:
> g = Group.new(:permissions_attributes => [{:role => 'admin', :action => 'one'}, {:role => 'admin', :action => 'one'}]
> g.valid? # => true BUT THIS SHOULD BE FALSE!!
> g.save # => true Oh Nos!!!
這是最有可能的,因爲每個權限被保存在同一交易(母公司)內。在rails文檔中:「對模型的所有更改(包括銷燬標記爲銷燬的模型)都會在保存父模型時自動保存和自動銷燬,這發生在由父保存方法啓動的事務內部。我的猜測是數據庫查找唯一性正在傳遞,因爲對象還沒有真正存儲。 – mnelson 2011-03-22 19:05:54
你解決了這個問題嗎?我有同樣的事情http://stackoverflow.com/questions/8111424/uniqueness-validation-using-has-many-through-association – amree 2011-11-14 01:54:41
對不起,長久以來忘了這個,還沒有研究到最終的解決方案爲我轉向其他事情。 – brad 2011-11-14 03:30:12