Ruby on Rails: выпадающее меню
Я пытаюсь создать раскрывающееся меню, чтобы пользователь мог изменить поле ввода в моей таблице. Пользователь имеет один из трех вариантов: горячий, средний и холодный.
У меня уже есть text_fields
, которые по сути делают то же самое для других полей, что все обновляется, когда пользователь нажимает на submit_tag
.
Есть ли простой способ реализовать раскрывающийся список и сохранить результат с помощью submit_tag
?
спасибо,
-Крис
Ответы
Ответ 1
Вот основной ответ. Массив из двух массивов элементов является важной частью.
<% form_for @entry do |f| %>
<%= f.text_field :name %>
<%= f.select :temperature, [['Hot','hot'],['Medium','medium'],['Cold','cold']] %>
<%= f.submit %>
<% end %>
Ответ 2
Я возьму 2 вещи:
- Что вы - идиома
<%= form_for @model_instance
(объяснено в разделе 2.2 это руководство).
- Чтобы вы сохраняли "горячие", "средние" и "холодные" значения как строки (а не цифры 1,2 и 3 или что-то подобное) в вашей базе данных.
Скажем, что у вас есть два поля, называемые :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
. Это добавит "пустой" вариант в раскрывающемся списке. Вам понадобится эта пустая опция при создании новых объектов, если вы не хотите, чтобы значение по умолчанию было задано.
Ответ 3
http://api.rubyonrails.org/classes/ActionView/Helpers/FormTagHelper.html#M001730
Ответ 4
Я работал над чем-то подобным. Я получил это для работы, просто добавив либо перечисление, либо константу (аналогично тому, что сказал kikito ранее) в моей модели, а затем вызвал выбор в моей форме.
Вот как он может работать.
с использованием константы:
class ClassName < ActiveRecord:: Base ТЕМПЕРАТУРЫ = ['Горячие', 'Средний', 'Холодный']
конец
bin/rails g migration add_column_to_table температуры: строка
_form.html.erb
<%= f.label :temperature %>
<%= f.select :temperature, ClassName::TEMPERATURE %>
или
с использованием перечисления:
class ClassName < ActiveRecord:: Base температура перелива: [: горячая,: средняя,: холодная]
конец
bin/rails g migration add_column_to_table температуры: integer
_form.html.erb
<%= f.label :temperature %>
<%= f.select :temperature, ClassName.temperatures.keys %>
Надеюсь, что вам поможет!
Ответ 5
Возможно, вы захотите рассмотреть 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 %>
Ответ 6
В соответствии со всеми приведенными выше ответами не забудьте сделать этот последний важный шаг:
Перезагрузите сервер!
Как новичок, мне было интересно, почему мой массив не работал, хотя я правильно выполнил все шаги.