这可能是一个真正的问题,但是如果您的参数列表包含一堆不可访问的属性的内容,即
params = {"controller"=>"api1/users", "action"=>"create"}
“清理”参数以便它们仅包含可访问的属性的最佳方法是什么。我目前想到的当前方法是:
User._accessible_attributes[:default].entries
这给了我一个可访问属性的列表,然后只传递这些参数:
["", "email", "password", "fb_token", "fb_id", "fb_name", "first_name", "last_name", "gender"
另一种可能的方法是:
def clean_params #ANTIPATTERN
params.delete(:controller)
params.delete(:action)
end
但这也感觉像是一种反模式......
我知道您应该执行 params[:user] 之类的操作来仅获取可访问的参数,但因为这是一个 API,所以能够仅在 url 中传递内容会很好。
谢谢!
最佳答案
Rails 参数包装器会自动为您执行此操作。也就是说,为了方便起见,它将接受顶层参数并将它们分组,例如 :user
,过滤掉 User 模型无法访问的任何参数。它在内部使用 accessible_attributes
,与您所做的类似。使用您的 API 的人不需要对属性进行分组——rails 会在将参数传递给您的 Controller 操作之前完成此操作。
默认情况下,它针对 JSON 请求启用,但您可以通过编辑 initializers/wrap_parameters.rb
来扩展它。或者您可以使用 wrap_parameters
method 在每个 Controller 的基础上调整行为在你的 Controller 中。
参数清理的 rails 方案可能会在 4.0 中发生变化,趋势是远离模型而转向 Controller 。您可能想观看 strong_parameters gem 的开发这可能是 future 事情的预演。
关于ruby-on-rails - 清理输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11043095/