我是ruby on rails
的新手。在研究Ruby中的参数时,我在ParamsWrapper
中遇到ActionController
。我想知道它的真实用法吗?
如果您在ParamsWrapper
上提供教程链接,那会更好。
提前致谢。
答案 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