首页 > 解决方案 > Rails 嵌套强参数,如何使用?

问题描述

我正在使用 Jquery 数据表。该库在特定的 json 结构上运行,例如:

{"data"=>{"209"=>{"order"=>"", "name"=>"dssdbs", "task_deadline"=>"", "task_status"=>"Nie przypisano", "board_id"=>"17", "user_id"=>"2", "task_group"=>"WWW", "assigned-many-count"=>"0"}}, "id"=>"209"}

问题是,我怎样才能把它变成强参数?现在我正在以非常糟糕的方式在控制器中操作我的参数:

task_params = params[:data][params[:id]]
@task = Test.find(params[:id]
@task.order = task_params[:order]
@task.name = task_params[:name]
@task.task_deadline = task_params[:deadline]
@task.task_status = task_params[:task_status]
@task.board_id = task_params[:board_id]
@task.user_id = task_params[:user_id]
@task.task_group = task_params[:task_group]
@task.save

当我想添加新任务时,我的参数看起来像:

{"data"=>{"0"=>{"order"=>"", "name"=>"dssdbs", "task_deadline"=>"", "task_status"=>"Nie przypisano", "board_id"=>"17", "user_id"=>"2", "task_group"=>"WWW", "assigned-many-count"=>"0"}}}

如您所见,我使用的是 0 而不是 ID。

有没有一些干净又好的方法在这里使用强参数?一切正常,但它与 DRY 方法完全不同。

谢谢你的任何建议

标签: ruby-on-rails

解决方案


def task_params 
  params.fetch(:data)
        .fetch(params[:id])
        .permit(
          :name,
          :order
          # ...
        )
end

fetchrequire如果您希望在缺少参数的情况下引发代码,则可以替换为。


推荐阅读