如何在Rails中设置哈希表单?

我有一些数据与散列中的模型相关联。 哈希值在控制器中生成: @hash

为此数据创建表单的正确方法是什么?

我想出了以下代码:

   

这会生成表单,但它会将每个哈希项创建为表单中的单独变量。 这似乎不是提交数据的正确方法。 我想将数据作为哈希值返回,并使用params[:hash]访问它。

做这个的最好方式是什么?

使用Rails 3.07,Ruby 1.9.2。

谢谢。

编辑:我应该说清楚。 此代码位于为模型生成的表单内。 因此,表单需要提交模型的所有字段,以及上面的哈希。

根据本文,您应该将text_field_tag中的名称更改为

 <% @hash.keys.each do |key| %> 
<%= f.label key %>
<%= text_field_tag "hash[" + key + "]", @hash[key] %>
<% end %>

我的答案不是严格的主题,但我真的建议你看看http://railscasts.com/episodes/219-active-model 。 您可以使用ActiveModel API来使用Rails 3模拟模型对象。这样做可以简单地执行类似的操作

 <%= form_for(@object) %> 

并将您的对象填充到Rails API。

当你使用以_tag结尾的助手时,会发生什么。

而不是text_field_tag ...使用f.text_field ...

为了获得像params => {:hash => {:field1 => "", :field2 => ""}} f.input_field_type params => {:hash => {:field1 => "", :field2 => ""}}你必须将form_forf.input_field_type而不是简单地将input_field_tag配对。

看到不同?