2012-12-03 9 views
5

İç içe geçmiş özniteliklere sahip bir formum var. Şimdi benim :reject_if => bildirimde iç içe modelde bir özniteliği kontrol etmek istiyorum, örneğin first_record? Böyle bir yönteme erişmek için bir yol var mı? Bana öyle görünüyor ki, bir alanın boş olup olmadığını kontrol etmek için sadece gönderilen öznitelik karmasına erişebilirsiniz. Teşekkürler!raylar accepts_nested_attributes ve: reject_if

+0

Reject_if'in yalnızca iç içe özniteliklerdeki değişiklikleri reddettiğini ve modele kötü iç içe öznitelik değeri kaydedildiğinde bir hataya neden olmayacağını bilmelisiniz. Bozuk iç içe öznitelikler üzerinde bir hata almak istiyorsanız, yalnızca doğrulamayı iç içe modelinize ekleyin ve ana modeli kaydederken bir hata atar. –

cevap

5

docs http://api.rubyonrails.org/classes/ActiveRecord/NestedAttributes/ClassMethods.html

göre Alternatif:

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 

Bu sizin için çalışması gerekir: reject_if da yöntemler kullanılarak bir sembolü kabul eder. Temel olarak bu, özel işlevde istediğiniz herhangi bir şeyi yapabileceğiniz anlamına gelir.

+0

Evet, ancak çağrılan yöntem, üye modelindedir. Yapılmakta olan iç içe nesnede bir yöntem aramak istiyorum. Mesela şunu kabul etmek istiyorum: accepts_nested_attributes_for: posts,: reject_if => post.first_record? '' Post '' un bir yöntemi 'first_record? 'Olduğunu varsayarak. Oluşturulmakta olan nesnenin bu şekilde mevcut olup olmadığından emin değilim, veya nesne gerçekte oluşturulmadan önce:: reject_if => 'çağrılıyorsa ... – Kasper

+2

Aslında, problemi başka bir şekilde çözdüm. Ama iç içe geçmiş nesnenin ": reject_if" için kullanılabilir olup olmadığını merak ediyorum. – Kasper