Action Controller Strong Parameters
Why
It’s forbidden to use raw parameters of ActionController for mass-assignment to Active Model. Developers have to consciously choose which fields are allowed. This is a better security practice to help prevent accidentally allowing users to update sensitive model attributes.
What
The params() instance method of ActionController will return a ActionController::Parameters object, carrying the request’s parameters.
- @see https://api.rubyonrails.org/v7.1.2/classes/ActionController/StrongParameters.html#method-i-params
How
ActionController::Parameters provides two methods: require and permit. The former is used to mark parameters as required. The latter is used to limit which attributes should be allowed.
-
@see https://api.rubyonrails.org/v7.1.2/classes/ActionController/Parameters.html#method-i-require
-
@see https://api.rubyonrails.org/v7.1.2/classes/ActionController/Parameters.html#method-i-permit
Where
This parameters sanitization process happens at ActionController. Usually is private method is defined to encapsulate the permissible parameters
class PeopleController < ActionController::Base
# some public actions
private
def person_params
params.require(:person).permit(:name, :age)
end
end
When
Parameters sanitization can be achieved:
- in the
before_action, or - in the action method
Who
Pending