3

我想批量更新实体的属性。

如何正确消毒来自葡萄的参数?

这是我关于参数的控制台日志:

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
4

1 回答 1

10

在葡萄中,您需要在实际方法之前声明您的参数。

在方法中,params对象是一个Hashie::Mash实例,并且没有像permitsanitize...

是在葡萄中声明和验证参数的相关文档:

您可以使用params块为您的参数定义验证和强制选项。

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

当指定类型时,会在强制执行后进行隐式验证,以确保输出类型是声明的类型。

如果您仍想使用强参数,则需要使用gem,并为您自己strong_parameters创建一个新实例:ActionController::Paramter

raw_parameters = { :email => "john@example.com", :name => "John", :admin => true }
parameters = ActionController::Parameters.new(raw_parameters)
user = User.create(parameters.permit(:name, :email))
于 2014-05-30T14:23:46.220 回答