2013-10-16 13 views
10

Bu yüzden hem raylar ve elbette rayların aşinalığım am nasıl yapılır4.</p> <p>Yani bu benim denetleyicisi dibinde ne var güçlü parametrelerde değişiklik (küçük harfe değişim)

def post_params 
    params.require(:post).permit(:title, :content, :category) 
end 

İyi çalışıyor, ancak yapmak istediğim, bu parametrelere post_params yönteminde veya daha sonra denetleyicide tek tek nasıl erişileceğidir.

Özellikle, kategoriyi gönderiyi oluştururken parametreyi kullanmadan önce kategori değerini küçük harfle değiştirmek istiyorum (böylece tüm kategoriler küçük harflerle gösterilmiştir).

DÜZENLEME: belki de sorularıma daha iyi bir ifadeyle, parametrelere izin verdikten sonra, sonradan nasıl erişebilir ve bunları kullanabilirim ... her zamanki gibi params [: title] kullanabilir miyim?

Ben

params.require(:post).permit(:title, :content) 
params.require(:post).permit(:category).downcase 

params.require(:post).permit(:title, :content, :category) 
params[:category].downcase 

ve

denedi Ama Sen değerini güncellemek için before_create geri arama kullanabilirsiniz Daha

cevap

7

undefined method 'downcase' olsun.

gibi

,

before_create :check_params 

def check_params 
    self.category.downcase!  
end 
+0

Sen kullanmak zorunda:

Muhtemelen daha iyi bir yolu, bir denetleyici eylem parametrelerden değerleri almak ve onları küçük harfe yapmaktır! operatör ... güncellemeyi seçmedi. –

7

strong_params fonksiyonudur sadece denetleyici verme konusunda bir çalışmayı değişkenlerin "beyaz liste". Bu gerçekten güvenlik amaçlıdır ve tam anlamıyla, yalnızca uygulamanız verileri kaydetmek için paragraflara [: permitted_param] erişebileceği anlamına gelir.


2 şeyler yapabilirdi vardır:> Şu şekilde kullanabilirsiniz - -

def create 
    params[:category].downcase 
    @post = Post.new(post_params) 
    @post.save 
end 

: Eğer post_params işlevini aramadan önce değişken [kategori]

> params düzenle @thiyaram tarafından tavsiye edildiği before_create işlevi de :)

+1

Bu kesinlikle en faydalı cevaptır (benim durumum için, en azından). – dsignr

+1

'.downcase' devam ederse,' .downcase! ' –

+0

ekleyerek deneyin! yaptı.Ama sadece yaratma yönteminin içinde çalıştım, post_params içinde değil, ben de vardı ... Emin değilim neden. – George

1

yapın: -

before_create :downcase_category 

def downcase_category 
self.category.downcase! 
end 
+0

Bu şekilde raylı geri dönüşümleri kullanmamalısınız – gazubi

+0

@bob_d Meraklı - neden olmasın? –

2

Rails 4 üzerindeyseniz, bu işe yaramayabilir: kurcalama yaptığınız parametreler, güçlü paramlar yoluyla açık bir şekilde beyaz listeye dahil olsanız bile artık kabul edilmez.

Rails bu değişikliği algılayıp izin verilmesini engelliyor gibi görünüyor.

a = params([:model_name][:id]) 
a.downcase! 
İlgili konular