2013-05-13 11 views

cevap

115

Yanıtı buldu here. Özniteliği denetleyici eyleminin içinden eklemek yerine, birleştirme ile params tanımına ekleyebilirsiniz. Benim önceki örnekte üzerine genişletmek için:

private 

    def post_params 
    params.require(:post).permit(:some_attribute).merge(user_id: current_user.id) 
    end 
+3

teşekkürler, ben, deep_merge kullanmak için gerekli ... – stephenmurdoch

+0

@marflar, param yapımcısı içinde 'deep_merge' kullandınız mı? Ya da kontrol cihazınızın başka bir yerinde? –

+0

İşte ben de böyle yapıyorum ama bu konuda biraz DRY yapmanın bir yolu olmalı diye düşünüyorum. Tüm 50+ denetleyicilerinde, sıkı params alanında benzer bir .merge ifadesi var. Benim durumumda current_user'ı update_by ile birleştiriyorum. Current_user öğesini sadece create metodunda create_by ile birleştiriyorum. – Dan

27

@ timothycommoner cevabı ek olarak, alternatif bir işlem başına temelinde birleştirme gerçekleştirebilir: Bu vaka için bir alternatif olarak

def create 
    @post = Post.new(post_params.merge(user_id: current_user.id)) 
    # save the object etc 
    end 

private 
    def post_params 
    params.require(:post).permit(:some_attribute) 
    end 
+1

Hey, bunu nasıl yuva yaparsınız? kaynak? – Patient55

+0

Neden emin değilim ama @ timothycommoner'ın cevabı benim için çalışmıyor. sadece bu bir tane ... ben bile birleştirme denedim! ve bu hala başarısız oldu. oh iyi, bu zaten daha kolay okur çünkü özel yöntemlerde kazma yok ve farklı kullanım durumlarda değiştirmek daha kolay – james

+0

@ Patient55 Sanırım seçilen cevapların görüşlerinde tartışıldığı gibi 'deep_merge' gerekir. – Wit

0

yapabilirsiniz scope aracılığıyla gerekli geçiş niteliği: my nitelikler iç içe çünkü

current_user.posts.create(post_params)

İlgili konular