Rails 4.0.0 strong parameters don't seem to work as documented -
the example used in documentation (http://guides.rubyonrails.org/action_controller_overview.html#strong-parameters) strong parameters is:
params.require(:person).permit(:name, :age)
however, doesn't work because require() returns value of parameter, not parameter object permit() can called on.
$ rails console 1.9.3p286 :005 > params = actioncontroller::parameters.new(person: 1, name: "joe", age: 30) => {"person"=>1, "name"=>"joe", "age"=>30} 1.9.3p286 :006 > params.require(:person).permit(:name, :age) nomethoderror: undefined method `permit' 1:fixnum (irb):6 /users/jeremyburton/.rvm/gems/ruby-1.9.3-p286/gems/railties-4.0.0/lib/rails/commands/console.rb:90:in `start' /users/jeremyburton/.rvm/gems/ruby-1.9.3-p286/gems/railties-4.0.0/lib/rails/commands/console.rb:9:in `start' /users/jeremyburton/.rvm/gems/ruby-1.9.3-p286/gems/railties-4.0.0/lib/rails/commands.rb:64:in `<top (required)>' bin/rails:4:in `require' bin/rails:4:in `<main>'
additionally, seems odd require can take 1 parameter. seems should able do:
params.require(:a, :b).permit(:c, :d)
whereas, have is:
params.require(:a) params.require(:b) params.permit(:a, :b, :c, :d)
which doesn't seem dry - if parameter required definition permitted, surely.
am missing something?
the intention of require
working rails form_for
objects, whereby params hash include name of object you're wrapping form around. this:
actioncontroller::parameters.new(person: { name: 'francesco' }).require(:person)
in case, form_for
have been wrapped around person
object. .require(:person)
wrap resulting hash ({ name: 'francesco' }
) actioncontroller::parameters
object can respond .permit
. test wasn't mimicking expected params use-case.
also, makes sense require
accept 1 argument since you'd want setup unique <attribute>_params
method per object type since, again, these meant wrappers around specific object. but, you'd have 1 root object being sent form submit, , sub objects within that.
Comments
Post a Comment