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

时间:2011-09-22 20:49:36

标签: ruby-on-rails ruby-on-rails-3 hash parameters form-for

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

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

我想出了以下代码:

  <% @hash.keys.each do |key| %>
    <div class="field">
      <%= f.label key %><br />
      <%= text_field_tag "hash_" + key, @hash[key] %> 
    </div>
  <% end %>

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

这样做的最佳方式是什么?

使用Rails 3.07,Ruby 1.9.2。

感谢。

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

3 个答案:

答案 0 :(得分:12)

根据此article,您应该将text_field_tag中的名称更改为

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

答案 1 :(得分:2)

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

的操作
<%= form_for(@object) %>

将您的对象填充到Rails API。

答案 2 :(得分:0)

当您使用以_tag结尾的帮助时,就会发生这种情况。

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

为了获得params => {:hash => {:field1 => "", :field2 => ""}}之类的哈希值,您必须将form_forf.input_field_type配对,而不是简单input_field_tag

看到区别?