如何告诉options_for_select字段将所选选项的值保存在哪里?

时间:2019-12-14 18:08:37

标签: ruby-on-rails

将近5年后,我将返回Rails,并建立一个个人项目。在我的_form.html.erb文件中,我试图使用一个字段,但是数据从未保存在我认为会保存的位置。

<select>
  <%= options_for_select([['black'], ['blue'], ['red']], :selected => :color) %>
</select>

在索引中,当我尝试使用model.color时,我什么也没得到。我确定我没有得到它的基本信息,但是由于某种原因,Google搜索和示例代码看起来并不完全像我得到的那样。我不确定要通过哪个选项告诉表单将​​所选值保存在哪里。

2 个答案:

答案 0 :(得分:0)

您需要给select标签命名(例如<select name="foo">填充params[:foo]<select name="foo[bar]">填充params[:foo][:bar];或者使用select_tag / select表单辅助方法-请参阅https://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#method-i-select_taghttps://api.rubyonrails.org/classes/ActionView/Helpers/FormBuilder.html#method-i-select)。

请注意:如果您已经有几年没有使用Rails了,那么您可能不知道要直接分配(例如{{ 1}}不像以前的Rails版本那样工作-您需要在此处使用强参数)。详细信息:https://edgeguides.rubyonrails.org/action_controller_overview.html#strong-parameters

答案 1 :(得分:0)

您需要为输入分配一个名称,以便对其进行有意义的操作-这不是特定于Rails的。 Web开发普遍适用。 HTTP中的表单数据只是一堆键值对,而name属性设置键。

在Rails中,除非有充分的理由不这样做,否则应使用表单生成器和输入帮助器-这是在配置约定后进行的。他们将为您分配名称属性:

<%= form_with(model: @thing) do |f| %>
  <%= f.select :color, [['Black','black'], ['Blue','blue'], ['Red', 'red']] %>
  # ...
<% end %>

这呈现出类似以下内容:

<select name="things[color]">
  <option value="black">Black</option>
  # ...
</select>

并会为您提供以下参数哈希:

{
  thing: {
    color: 'black'
  }
}

它们还提供您的模型和表单之间的数据绑定,以便在用户提交无效表单时不会重置输入。

我真的会从阅读the rails guides开始,因为您还有很多地方需要追赶。