【问题标题】:How to get a hash in a Rails form如何在 Rails 表单中获取哈希
【发布时间】:2018-01-26 13:14:45
【问题描述】:

我有一个带有 2 个字段的 Rails 模型:“名称”和“存储桶”。 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 %>

问题是,当我调试和打印参数时,我只找到一个空的桶哈希。一个问题似乎是由于每个循环,我只能得到最后一个输入文本。

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

text_field_tag "bucket[]"

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

【问题讨论】:

    标签: ruby-on-rails forms web


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-11-23
      • 2010-12-19
      • 1970-01-01
      • 2015-03-22
      • 1970-01-01
      • 2011-09-07
      • 1970-01-01
      • 2017-10-14
      • 2021-12-30
      相关资源
      最近更新 更多