2016-06-14 24 views
6

Denetleyicimin update eyleminin en üstünde bir binding.pry koydum. Bu mola noktasında, params karma değerini incelemek için params[:foo_bar]'u ekledim. İşte ne alıyorum: Neden Güçlü Params izin veriliyor: false

<ActionController::Parameters {"utf8"=>"✓", "_method"=>"patch", "authenticity_token"=>"123==", "foobar"=><ActionController::Parameters {"barbazz_attributes"=>{"start_date"=>"08/27/2016", "end_date"=>"08/29/2016", "id"=>"89"}, "bazz_id"=>"3", "abc_id"=>"330", "bazzbazz_attributes"=>{"0"=>{"_destroy"=>"1", "city_id"=>"1669", "id"=>"26"}, "1"=>{"city_id"=>"1681", "id"=>"27"}, "2"=>{"city_id"=>"1672"}}} permitted: false>, "cat_id"=>["1", "1", "1"], "commit"=>"Update FooBar", "controller"=>"foo_bars", "action"=>"update", "id"=>"52"} permitted: false> 

Sanırım bazı özelliklerini beyaz listeye yoktu çünkü permitted: false var üstlendi. Özniteliklere baktım ve bana her şeyi beyaz listeye ekledim.

Eğer herhangi bir fark yaratırsanız Rails 5 kullanıyorum.

Soru: Güçlü parametreler params: false dönüyor nedenini öğrenmek için kolay bir yoldur ne.

+1

Paramize izin verdiğiniz yeri gösterir misiniz? Genellikle bu bir isme sahip bir yöntemdir: diyelim: 'foobar_params' ve bu metot aracılığıyla izin verilen paramize erişirsiniz ve direkt olarak 'params' den değil. Muhtemelen izinli olarak yanlış görüyorsunuz. Kolay yolu, kaynak kodunu okumaktır: https://github.com/rails/strong_parameters/blob/master/lib/action_controller/parameters.rb#L42, 'permit 'aramadıkça' permitted = false' varsayılan değerdir! 'herkese izin vermek, ancak bu güçlü parametrelerin amacını yener. – Leito

cevap

2

Paramize params ile doğrudan erişmeyin, bunun yerine izin verilen paramları verdiğiniz ismi kullanın, örneğin: foobar_params.

foobar_params ise tanımlanır:

def foobar_params 
    params.require(:foobar).permit ... 
end 

kolay yolu ActionController::Parameter için kaynak kodunu okumaktır, tüm izin permit! çağrı sürece permitted = false varsayılan, ama bu güçlü parametrelerin amacını yendi.

+1

Teşekkürler! Foobar_params öğesini kullandığımda, şimdi "izin verildi: true" değerini gösterir. Basit bir şey olacağını biliyordum! – Neil

+1

Her zaman öyle! Bu, istemeden 'Foobar.create' üzerindeki paramları istemeyerek kullanmanızı engellemektir. – Leito

İlgili konular