将近5年后,我将返回Rails,并建立一个个人项目。在我的_form.html.erb
文件中,我试图使用一个字段,但是数据从未保存在我认为会保存的位置。
<select>
<%= options_for_select([['black'], ['blue'], ['red']], :selected => :color) %>
</select>
在索引中,当我尝试使用model.color
时,我什么也没得到。我确定我没有得到它的基本信息,但是由于某种原因,Google搜索和示例代码看起来并不完全像我得到的那样。我不确定要通过哪个选项告诉表单将所选值保存在哪里。
答案 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_tag和https://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开始,因为您还有很多地方需要追赶。