2012-12-03 43 views
5

我有一個嵌套屬性的窗體。現在在我的:reject_if =>聲明中,我想檢查嵌套模型上的屬性,例如first_record?有沒有辦法訪問這種方法?在我看來,你只能訪問提交的屬性散列,例如檢查一個字段是否爲空。謝謝!rails accepted_nested_attributes和:reject_if

+0

您應該意識到,reject_if只會拒絕對嵌套屬性的更改,因此在使用不良嵌套屬性值保存模型時不會導致錯誤。如果你想得到錯誤的嵌套屬性錯誤,只需將驗證添加到嵌套模型中,然後在保存父模型時會引發錯誤。 –

回答

5

根據文檔http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

另外,:reject_if還接受了使用方法的象徵:

class Member < ActiveRecord::Base 
    has_many :posts 
    accepts_nested_attributes_for :posts, :reject_if => :new_record? 
end 

class Member < ActiveRecord::Base 
    has_many :posts 
    accepts_nested_attributes_for :posts, :reject_if => :reject_posts 

    def reject_posts(attributed) 
    attributed['title'].blank? 
    end 
end 

這應該爲你工作。基本上這意味着在自定義功能中,你可以做任何你想做的事情。

+0

是的,但調用的方法在成員模型上。我想調用正在構建的嵌套對象的方法。因此,舉個例子,我想說'accepting_attributes_for:posts,:reject_if => post.first_record?'假設'Post'有一個方法'first_record?'。我不確定正在構建的對象是否可用,或者在對象實際構建之前調用了':reject_if =>'...? – Kasper

+2

好吧,我以另一種方式解決了實際問題。但我仍然很好奇嵌套對象是否可用於':reject_if'。 – Kasper

相關問題