如何在Rails表单中获取哈希

时间:2018-01-26 13:14:46

标签: ruby-on-rails forms web

我有一个包含2个字段的Rails模型:'name'和'bucket'。 Name是一个字符串,bucket是以下形式的哈希:bucket:{red:1,green:2,...}。

我创建了一个rails表单来填充这些字段,但是当名称正常工作时,其余部分甚至不会显示为值。

当我尝试将颜色绑定到用户提供的值时,默认值为0时,这是不起作用的。

<% @board.fetch_all_colors.each do |color|  %>
    <%= form.label color.to_sym, "#{color}:" %>
    <div class="input">
      <%= form.text_field :bucket, value: 0.0 %>
    </div>
<% end %>

问题是当我调试和打印params时,我只找到一个空桶哈希。一个问题似乎是因为每个循环,我只得到最后一个输入文本。

编辑:我找到了一个解决方法,让我占了一半。而不是text_field,我使用以下内容:

text_field_tag "bucket[]"

以上使用我的输入并将其放入数组中。问题在于,由于输入是动态的(并且可能有标签来去,我不能保证数组的位置(例如,第3个位置总是'红色')。我可以使用类似上面的内容但是哈希?

1 个答案:

答案 0 :(得分:0)

虽然rails DB驱动程序支持类似JSON的对象,但其余的rails堆栈并没有用于指定多值列属性的无缝API。

您需要在控制器中根据自定义属性动态构建哈希值,这些属性与您的模型没有1:1的映射关系。

或者以类似Rails的方式,您可以使用has_many关系,将buckets作为单独的模型存储在与Board模型连接的数据库中。 accepts_nested_attributes_for会帮助你做到这一点。