ParamsWrapper在轨道上的红宝石?

时间:2014-12-19 12:44:12

标签: ruby-on-rails

我是ruby on rails的新手。在研究Ruby中的参数时,我在ParamsWrapper中遇到ActionController。我想知道它的真实用法吗?

如果您在ParamsWrapper上提供教程链接,那会更好。

提前致谢。

2 个答案:

答案 0 :(得分:2)

在Rails列车中工作几年,在处理表单(搜索除外)或一般视图时,还没有看到任何有用(或合适)的用例,更具体。

真正的ParamsWrapper有用(在我看来)是在处理应用API时。考虑一个案例,应用程序具有可由第三方访问的/users API,并且一个想要获取用户数据,例如输入:{"name": "Foo"}

为用户控制器定义ParamsWrapper

class UsersController < ApplicationController
  wrap_parameters format: [:json, :xml]
end

或者,更通用:

class ApplicationController
  wrap_parameters format: [:json, :xml]
end

过滤此类用户非常容易,因为params被包装到用户密钥{"name" => "Foo", "user" => {"name" => "Foo"}}中。现在,要过滤给定用户,可以只键入User.where(params[:user])(或User.find_by(params[:user])以匹配特定用户)。

这种方法有什么优势?你不需要打扰,哪个param属于什么模型,它们只是匹配给定的模型attribute_names

答案 1 :(得分:1)

包装器应该简化与REST客户端的集成,允许客户端根据需要发送带有模型名称的根元素,并允许应用程序访问它而无需处理检查根元素是否为那里。

这是一件微不足道的事情,但如果您无法控制所有客户端,特别是对于已经运行的应用程序,它会派上用场。

我总是在config/initializers/wrap_parameters.rb

中打开它
ActiveSupport.on_load(:action_controller) do
  wrap_parameters format: [:json] if respond_to?(:wrap_parameters)
end