Rails:将参数重塑为所需的结构
Posted
技术标签:
【中文标题】Rails:将参数重塑为所需的结构【英文标题】:Rails: reshape params to desired structure 【发布时间】:2022-01-05 22:36:21 【问题描述】:我有一些参数需要重新调整?
我有一个旧数据库,我正在尝试在其上构建一个新应用程序来访问和执行 CRUD 操作。
我只需要制作这个结构...
"volunteer_shift_attributes"=><ActionController::Parameters
"volunteer_task_type_id"=>"41",
"roster_id"=>"7",
"program_id"=>"9",
"set_description"=>"ddddddddddd"
permitted: true>,
"set_date"=>"2021-01-14",
"contact_id"=>"166574",
"closed"=>"0",
"start_time(4i)"=>"14",
"start_time(5i)"=>"00",
"end_time(4i)"=>"15",
"end_time(5i)"=>"00",
"notes"=>"nnnnnnnnnnnnn",
有这个结构...
"volunteer_shift_attributes"=>
"volunteer_task_type_id"=>"41",
"roster_id"=>"7",
"program_id"=>"9",
"set_description"=>"ddddddddddd"
,
"set_date"=>"2021-01-15",
"contact_id"=>"166574",
"closed"=>"0",
"start_time(4i)"=>"14",
"start_time(5i)"=>"00",
"end_time(4i)"=>"15",
"end_time(5i)"=>"00",
"notes"=>"aaaaaaaaaaaaaa"
注意:这是在控制器方法中调用的,像这样
def create_shift
...
a.attributes = (params["assignment"])
...
end
我需要手动重建这个参数。
【问题讨论】:
您可以调用.to_h
将ActionController::Parameters 转换为简单的哈希。虽然 ActiveRecord 应该可以很好地处理参数对象。
@arieljuod 所以你说 params["assignment"].to_h 会解决这个问题吗?
@Eyeslandic 已将更新添加到帖子中。希望这个附加信息能回答问题。
感谢您的更新。这看起来像是一条自定义错误消息,所以大概是在志愿者模型或其他地方定义了它。如果您可以找到错误的定义位置,您可以查看导致它的条件。 (此外,您的参数中没有关键的“分配”,因此失败也就不足为奇了。)
您似乎已撤消更新并再次从问题中删除了信息。你能告诉我们你为什么这样做吗?
【参考方案1】:
尚不清楚您为什么需要这样做 - 它们只是参数,而您并不想改变结构,确切地说。但看起来这可能是强参数的一个案例。定义私有方法:
def volunteer_shift_params
params.require(:volunteer_shift_attributes)
.permit(:volunteer_task_type_id,
:roster_id,
:program_id,
:set_description)
end
那么,您应该可以按照您的要求执行此操作:
a.attributes = volunteer_shift_params
【讨论】:
强参数已关闭。我只需要按照指示将参数字符串从一种结构更改为另一种结构。 在您对问题的编辑中禁用强参数的解释对我来说没有意义。强参数只处理表单与 Rails 5 应用程序的通信方式,而不是数据库。它们是使您的应用程序更安全的好方法。以上是关于Rails:将参数重塑为所需的结构的主要内容,如果未能解决你的问题,请参考以下文章