2013-02-27 62 views
25

我有一个没有与之关联的模型的表单,所以我使用的是form_tag而不是form_for。正如所料,当用户提交表单时,每个字段都包含在params散列中。但是表单会发生很大的变化,我希望在params散列中包含所有表单字段值,以便每次更改表单时都不必更改控制器。嵌套哈希中的Form_tag参数

有没有办法将表单字段值放入类似form_for的嵌套哈希中?我希望能够把所有的表单字段并通过执行类似params[:form_fields].to_json

回答

50

可以使用fields_for一个form_tag内表达一个命名空间的更正式的方式转换成JSON。

fields_for :form_fields do |ff| 
    ff.text_field :my_text_field 
    ff.select :my_select_tag 
end 

或者只是命名空间所有的表单输入,因为这样的:

text_field_tag "form_fields[my_text_field]" 
select_tag "form_fields[my_select_tag]" ... 

等,然后你会得到params[:form_fields] = {:my_text_field => "foo", :my_select_tag => "bar"},我认为这是你想要的。

+0

这似乎正在做我所需要的。谢谢! – 2013-02-27 15:59:05

+1

我发现强参数与符号不匹配:my_text_field与此生成的字符串“:my_text_field” – 2014-08-26 17:59:46

+0

输入元素的字符串名称映射到符号,所以''my_text_field“'将匹配':my_text_field', '“:my_text_field”'可能不会。 – 2014-08-27 09:04:58