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:将参数重塑为所需的结构的主要内容,如果未能解决你的问题,请参考以下文章

如何查询/将数据转换为所需的格式

将数据帧转换为所需的字典格式

如何将 python 字典转换为所需的格式

将列表中的内容拆分为所需的输出

将 MultipartFile 转换为所需的类型 byte[] thymeleaf 错误

如何将python字典转换为所需的数据框输出? [复制]