I tried code, that plused a lot of people - How to test if parameters exist in rails, but it didn't work():
if ( params.has_key?([:start_date]) && params.has_key?([:end_date]) )
I think, that is because of complicated params and if I write this:
if ( params.has_key?([:report][:start_date]) && params.has_key?([:report][:end_date]) )
gives me error
can't convert Symbol into Integer
this doesn't work too:
if ( params[:report][:start_date] && params[:report][:end_date] )
gives me error:
undefined method `[]' for nil:NilClass
It always go into else statement.
Here are my params:
report:
start_date: 01/08/2012
end_date: 10/08/2012
Can someone help me ?
if params[:report] && params[:report][:start_date] && params[:report][:end_date]
Cross-post answer from here:
Ruby 2.3.0 makes this very easy to do with #dig.
h = { foo: {bar: {baz: 1}}}
h.dig(:foo, :bar, :baz) #=> 1
h.dig(:foo, :zot, :baz) #=> nil
I have been looking for a better solution too. I found this one:
Is there a clean way to avoid calling a method on nil in a nested params hash?
params[:some].try(:[], :field)
You get the value or nil if it does not exist.
So I figured let's use try a different way:
params[:some].try(:has_key?, :field)
It's not bad. You get nil vs. false if it's not set. You also get true if the param is set to nil.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With