-
Notifications
You must be signed in to change notification settings - Fork 88
Open
Labels
Description
Basic Info
- rails_param Version: 1.3.0
- Ruby Version: 3.1
- Rails Version: 7.0
Issue description
We pass in our spec the following:
req[:orders_attributes][0][:email] = %w[foo@bar.com baz@fuzz.com]
And in our controller we validate this param with a:
order.param! :email, String
With rails_param (0.11.2) and rails 6 the coercion happens. With rails_param (~> 1.3.0) it doesn't
Extract from pry session while running the spec:
RAILS 6
[3] pry(#<Api::ImportController>)> order.params["email"]
=> ["foo@bar.com", "baz@fuzz.com"]
[4] pry(#<Api::ImportController>)>
[3] pry(#<Api::ImportController>)> order.param! :email, String
RailsParam::Param::InvalidParameterError: '["foo@bar.com", "baz@fuzz.com"]' is not a valid String
from /home/foo/.bundle/ruby/3.1.0/gems/rails_param-0.11.2/lib/rails_param/param.rb:134:in `rescue in coerce'
Caused by ArgumentError: ArgumentError
from /home/foo/.bundle/ruby/3.1.0/gems/rails_param-0.11.2/lib/rails_param/param.rb:106:in `coerce'
RAILS 7 and the gem 1.3.0, the exception doesn't get raised
[1] pry(#<Api::ImportController>)> order.params["email"]
=> ["foo@bar.com", "baz@fuzz.com"]
[2] pry(#<Api::ImportController>)> order.param! :email, String
=> "[\"foo@bar.com\", \"baz@fuzz.com\"]"
[3] pry(#<Api::Las::Scc::ImportController>)>
For sure in that case I could simply validate by format, but I have more than 30 unique fails, since this is validated in many different parameters.
Steps to reproduce
I think passing an array like %w[foo@bar.com baz@fuzz.com] or as nested attributes like in my case (req[:orders_attributes][0][:email] ) having he validation as foo.param! :email, String should do the trick:
Reactions are currently unavailable