Take care when merging with params
Be careful when using params.merge
as params
is a HashWithIndifferentAccess.
Why?
Usually this should not be an issue but it turns crazy if you try to include associated models deeper than 1 level:
options = params.merge(:include => { :user => :avatar })
Post.paginate options
When inspecting the merged params you will get something like this:
{ :include=> { "user" => :avatar }, :page => 23 }
Here the :user
symbol in the hash of inclusions turned into a "user"
string.\
This breaks Rails' loading of associations as it will complain about calling nil.name
or nil.macro
while it tries to process the association list.
Best practice
Make sure to do it this way:
params.to_hash.symbolize_keys.merge(:include => { :user => :avatar })
(Note that params.to_hash
returns a hash with string keys.)
Once an application no longer requires constant development, it needs periodic maintenance for stable and secure operation. makandra offers monthly maintenance contracts that let you focus on your business while we make sure the lights stay on.