English 中文(简体)
Rails: 在修改数据库之前修改表单参数
原标题:
  • 时间:2009-01-08 19:21:54
  •  标签:

我正在开发一个使用Rails的应用程序,该应用程序通过表单发送数据。我想在表单发送后但在处理之前修改一些表单的“参数”。

我现在拥有什么

{"commit"=>"Create",
  "authenticity_token"=>"0000000000000000000000000"
  "page"=>{
    "body"=>"TEST",
    "link_attributes"=>[
      {"action"=>"Foo"},
      {"action"=>"Bar"},
      {"action"=>"Test"},
      {"action"=>"Blah"}
    ]
  }
}

我想要的。

{"commit"=>"Create",
  "authenticity_token"=>"0000000000000000000000000"
  "page"=>{
    "body"=>"TEST",
    "link_attributes"=>[
      {"action"=>"Foo",
       "source_id"=>1},
      {"action"=>"Bar",
       "source_id"=>1},
      {"action"=>"Test",
       "source_id"=>1},
      {"action"=>"Blah",
       "source_id"=>1},
    ]
  }
}

这个可行吗?基本上,我试图同时提交两种类型的数据(“页面”和“链接”),并将“链接”的“source_id”指定为“页面”的“id”。

最佳回答

在提交到数据库之前,您可以在控制器中编写代码,以在保存之前获取参数并附加不同的信息。例如:

FooController < ApplicationController

  def update
    params[:page] ||= {}
    params[:page][:link_attributes] ||= []
    params[:page][:link_attriubtes].each { |h| h[:source_id] ||=  1  }
    Page.create(params[:page])
  end

end
问题回答

Edit params before you use strong params

好的,我(让这个老问题复活)在这个问题上遇到了很多麻烦,我想修改它到达模型之前的参数(并保持强大的参数)。我终于弄清楚了,以下是基本信息:

def update
  sanitize_my_stuff
  @my_thing.update(my_things_params)
end

private

def sanitize_my_stuff
  params[:my_thing][:my_nested_attributes][:foo] = "hello"
end

def my_things_params
  params.permit(etc etc)
end

你也应该考虑使用回调函数,特别是 before_validate(如果你使用验证)、before_save 或 before_create。

如果不了解你是如何保存数据,很难给你一个使用它们的具体示例,但它可能与Gaius提供的示例非常相似。





相关问题
热门标签