How to sanitize grape params
grape-api, ruby, ruby-on-rails
Solution
In grape you need to declare your params before the actual method.
Within the method the `params` object is a `Hashie::Mash` instance, and does not have APIs like `permit` and `sanitize`...
Here is the relevant documentation for declaring and validating parameters in grape:
You can define validations and coercion options for your parameters using a `params` block.
params do
requires :id, type: Integer
optional :text, type: String, regexp: /^[a-z]+$/
group :media do
requires :url
end
optional :audio do
requires :format, type: Symbol, values: [:mp3, :wav, :aac, :ogg], default: :mp3
end
mutually_exclusive :media, :audio
end
put ':id' do
# params[:id] is an Integer
end
When a type is specified an implicit validation is done after the coercion to ensure the output type is the one declared.
If you still want to use strong parameters, you'll need to use the `strong_parameters` gem, and create a new instance of `ActionController::Paramter` yourself:
raw_parameters = { :email => "john@example.com", :name => "John", :admin => true }
parameters = ActionController::Parameters.new(raw_parameters)
user = User.create(parameters.permit(:name, :email))
Problem
I want to mass update attributes of an entity. How can I sanitize properly the params which is coming from grape? This is my console log about the parameters: ``` params.except(:route_info, :token, :id) => {"display_number"=>"7"} [18] pry(#<Grape::Endpoint>)> params.permit(:display_number) ArgumentError: wrong number of arguments (2 for 0..1) from /Users/boti/.rvm/gems/ruby-2.0.0-p353@thelocker/gems/hashie-2.0.5/lib/hashie/mash.rb:207:in `default' [19] pry(#<Grape::Endpoint>)> params.sanitize => nil ```