首页 > 解决方案 > 如何将值分配给从参数到 ActionController::Parameters 对象的键

问题描述

如何将值从参数分配给ActionController::Parameters对象?

我尝试了什么:

(byebug) foo_inquiry_params
<ActionController::Parameters {"email"=>"fds@fsdgf.com", "subject"=>"fds", "description"=>"fds"} permitted: true>
(byebug) name_inquiry_params["user_id"] = 5
5
(byebug) foo_inquiry_params
<ActionController::Parameters {"email"=>"fds@fsdgf.com", "subject"=>"fds", "description"=>"fds"} permitted: true>
(byebug) 

标签: ruby-on-rails

解决方案


ActionController::Parameters不能像普通哈希一样对待,所以如果你想调用.merge它,你必须先将你的参数转换为哈希:

ActionController::Parameters.new({foo: 'bar'}).to_h.merge({bar: 'baz'})

当我不得不做这种事情时,我发现自己使用的工作流程是:

def update
  attrs_to_update = thing_params.to_h.merge(one_more_attribute: 'some value')
  @thing.update(attrs_to_update)
end

def thing_params
  params.require(:thing).permit(:some_attribute, :another_attribute)
end

推荐阅读