我正在尝试创建一个下拉菜单,允许用户更改表格中的条目字段。用户有三个选项之一 - 热,中和冷。
我已经text_fields
对其他字段做了基本相同的事情,当用户点击submit_tag
时,所有字段都会更新。
是否有一种简单的方法可以实现下拉框并将结果与submit_tag
一起保存?
感谢,
-Chris
答案 0 :(得分:39)
这是基本答案。两个元素数组的数组是关键部分。
<% form_for @entry do |f| %>
<%= f.text_field :name %>
<%= f.select :temperature, [['Hot','hot'],['Medium','medium'],['Cold','cold']] %>
<%= f.submit %>
<% end %>
答案 1 :(得分:23)
我会假设两件事:
<%= form_for @model_instance
成语(在this guide的第2.2节中解释过)。假设您有两个字段,名为:name
和:temperature
,由两个text_fields
控制:
<% form_for @article do |f| %>
<%= f.text_field :name %>
<%= f.text_field :temperature %>
<%= f.submit "Create" %> <% end %>
<% end %>
现在您要将:温度控制更改为下拉列表,接受热,中,冷值。然后你可以这样做:
<% form_for @article do |f| %>
<%= f.text_field :name %>
<%= f.collection_select :temperature, Article::TEMPERATURES, :to_s, :to_s,
:include_blank => true
%>
<%= f.submit "Create" %> <% end %>
<% end %>
您现在必须在文章模型中定义Article::TEMPERATURES
常量。这应该不是很困难:
class Article < Activerecord::Base
TEMPERATURES = ['hot', 'medium', 'cold']
您可能想知道为什么我在:include_blank
上添加了collection_select
部分。这将在您的下拉列表中添加“空”选项。在创建新对象时,您将需要该空选项,除非您希望将“默认”值设置为温度。
答案 2 :(得分:3)
答案 3 :(得分:2)
我正在做类似的事情。我通过简单地在我的模型中添加枚举或常量(类似于之前的kikito所说的)然后在我的表单中调用select来实现这一点。
以下是它的工作原理。
使用常量:
class ClassName&lt;的ActiveRecord :: Base的 TEMPERATURES = [&#39; Hot&#39;,&#39; Medium&#39;&#39; Cold&#39;] 端
bin / rails g migration add_column_to_table temperature:string
_form.html.erb
<%= f.label :temperature %>
<%= f.select :temperature, ClassName::TEMPERATURE %>
或
使用枚举:
class ClassName&lt;的ActiveRecord :: Base的 枚温:[:hot,:medium,:cold] 端
bin / rails g migration add_column_to_table temperature:integer
_form.html.erb
<%= f.label :temperature %>
<%= f.select :temperature, ClassName.temperatures.keys %>
希望能帮到你!
答案 4 :(得分:1)
你可能想要考虑formtastic gem少得多的代码。
<% semantic_form_for @stuff do |f| %>
<% f.inputs do %>
<%= f.input :name %>
<%= f.input :temperature, :as => :select,
:label => "Degree", :include_blank => false,
:collection => [["Hot", 1], ["Medium", 2], ["Cold", 3]] %>
<% end %>
<%= f.buttons %>
<% end %>
答案 5 :(得分:0)
根据以上所有答案,请记住最后这个重要步骤:
重新启动服务器!
作为一个新手,我想知道为什么即使我正确地执行了所有步骤,我的阵列也无法正常工作。