Rails 5 generating deprecation warning when using strong parameter
I'm using Rails 5 and this deprecation warning is been shown:
DEPRECATION WARNING: Method to_hash is deprecated and will be removed in Rails 5.1, as ActionController::Parameters no longer inherits from hash. Using this deprecated behavior exposes potential security problems. If you continue to use this method you may be creating a security vulnerability in your app that can be exploited. Instead, consider using one of these documented methods which are not deprecated: http://api.rubyonrails.org/v5.0.0/classes/ActionController/Parameters.html
This is my code:
track = API::Tracker::Track.new(track_params)
And this is my work around:
track = API::Tracker::Track.new(track_params.to_h)
Is there any permanent solution?
@cesarjr are your track_params coming in as standard ActionController::Parameters before you run to_h?
@solnic want to push a new version or add me to the gem so I can?
@envygeeks just added you to rubygems.org as a new gem owner so you can push releases
Any fix for this?
Ah I forgot about this issue, I'll add it to my todo for this week.
Sooo?
+1
+1
+1 I'm using this code:
<%= params.except(:controller, :action).merge(rating: i).to_param %>
but am getting the same deprecation warning on to_param method. But, I've read the link and googled for an hour and have found no alternatives to achieve what I want (add a new get param to existing params and putting them into this format:
param=value¶m2=value¶m3=value
changing
def coerce(attributes)
::Hash.try_convert(attributes) or raise(
NoMethodError, "Expected #{attributes.inspect} to respond to #to_hash"
)
end
to
def coerce(attributes)
(attributes.respond_to?(:permitted?) ? attributes.to_h : ::Hash.try_convert(attributes) or raise(
NoMethodError, "Expected #{attributes.inspect} to respond to #to_hash"
)
end
in AttributeSet
should fix the deprecation
+1 Created a pr for this: #382
You can do this in your Virtus model:
def initialize(attributes)
super(attributes.to_h)
end