Подтвердить что ты не робот

Ruby on Rails: выпадающее меню

Я пытаюсь создать раскрывающееся меню, чтобы пользователь мог изменить поле ввода в моей таблице. Пользователь имеет один из трех вариантов: горячий, средний и холодный.

У меня уже есть text_fields, которые по сути делают то же самое для других полей, что все обновляется, когда пользователь нажимает на submit_tag.

Есть ли простой способ реализовать раскрывающийся список и сохранить результат с помощью submit_tag?

спасибо,

-Крис

4b9b3361

Ответ 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. Это добавит "пустой" вариант в раскрывающемся списке. Вам понадобится эта пустая опция при создании новых объектов, если вы не хотите, чтобы значение по умолчанию было задано.

Ответ 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

В соответствии со всеми приведенными выше ответами не забудьте сделать этот последний важный шаг:

Перезагрузите сервер!

Как новичок, мне было интересно, почему мой массив не работал, хотя я правильно выполнил все шаги.