我正在开发一个通过表单发送数据的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”。
答案 0 :(得分:15)
在提交到数据库之前,您可以在控制器中编写代码,该代码将获取参数并在保存之前附加不同的信息。例如:
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
答案 1 :(得分:2)
您还应该查看回调,特别是before_validate(如果您使用的是验证),before_save或before_create。
如果不知道如何保存数据,很难给出一个如何使用它们的具体示例,但它可能看起来与Gaius给出的示例非常相似。
答案 2 :(得分:2)
好的,(恢复这个老问题)我遇到了很多麻烦,我想在它到达模型之前修改一个参数(并保持强大的参数)。我终于明白了,这是基础知识:
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