【发布时间】:2018-01-25 02:56:27
【问题描述】:
StrongParameters 有没有办法将模型名称保留为哈希根?
例如,当我提交创建用户的表单时,我的参数看起来像
<ActionController::Parameters {"utf8"=>"✓", "authenticity_token"=>"...", "user"=>{"full_name"=>"first last", "email"=>"me@example.com"}, "button"=>"", "controller"=>"admin/users", "action"=>"create"} permitted: false>
注意它们包含"user"=>{...}。
然而,在用 StrongParamyetes 对它们进行消毒之后
def user_params
params.require(:user).permit(:full_name, :email)
end
我明白了
<ActionController::Parameters {"full_name"=>"first last", "email"=>"me@example.com"} permitted: true>
在根键中没有"user"。
我知道,我可以手动添加它
def user_params
{ user: { params.require(:user).permit(:full_name, :email) } }
end
但我想知道是否可以设置一个选项以在我的所有控制器上默认获取该行为。
谢谢。
UPDATE 1(使用user_params)
#users_controller.rb
def create
if MyFancyFancyObject.call(user_params)
redirect_to users_path,
else
render action: "new"
end
end
【问题讨论】:
-
您这样做有什么具体原因吗?
-
是的,确实是有原因的。在不关注与问题无关的太多细节的情况下,我可以说将模型名称作为键允许我从下层提取重复的代码。目前,我有多个执行相同操作但它们不同的对象,因为除了参数之外,它们还必须知道要使用的类。使用参数中的名称,我可以拥有一个对象。谢谢
-
您在控制器中使用 StrongParamyetes 对哪里进行消毒?我没有得到你真正想要的问题。
-
@Vishal 我已经添加了我的
create操作。仅供参考,当 IMyFancyFacyObject.call返回true或false时。希望这可以为您提供全貌。 -
@macsig MyFancyFancyObject 是模型还是服务?
标签: ruby-on-rails strong-parameters