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

Радио кнопки на Rails

Аналогично этому вопросу: Флажки на Rails

Каков правильный способ создания переключателей, связанных с определенным вопросом в Ruby on Rails? На данный момент у меня есть:

<div class="form_row">
    <label for="theme">Theme:</label>
    <br><%= radio_button_tag 'theme', 'plain', true %> Plain
    <br><%= radio_button_tag 'theme', 'desert' %> Desert
    <br><%= radio_button_tag 'theme', 'green' %> Green
    <br><%= radio_button_tag 'theme', 'corporate' %> Corporate
    <br><%= radio_button_tag 'theme', 'funky' %> Funky
</div>

Я также хочу иметь возможность автоматически проверять ранее выбранные элементы (если эта форма была перезагружена). Как загрузить параметры в значение по умолчанию?

4b9b3361

Ответ 1

Как и в этот предыдущий пост, с небольшим завихрением:

<div class="form_row">
    <label for="theme">Theme:</label>
    <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %>
      <br><%= radio_button_tag 'theme', theme, @theme == theme %>
      <%= theme.humanize %>
    <% end %>
</div>

Где

@theme = params[:theme]

Ответ 2

То же, что и V, но имеет соответствующие метки с каждым переключателем. Щелчок по метке проверяет переключатель.

<div class="form_row">
  <p>Theme:</p>
  <% [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme| %>
    <br><%= radio_button_tag 'theme', theme, @theme == theme %>
    <%= label_tag "theme_#{theme}", theme.humanize %>
  <% end %>
</div>

Ответ 3

Использование Haml, избавление от ненужных ярлыков BR и вложенные входы внутри метки, чтобы они могли быть выбраны без сопоставления меток с идентификаторами. Также используйте form_for. Я бы счел, что это следует за лучшими практиками.

= form_for current_user do |form|
  .form_row
    %label Theme:
    - [ 'plain', 'desert', 'green', 'corporate', 'funky' ].each do |theme|
      %label
        = form.radio_button(:theme, theme)
        = theme.humanize

Ответ 4

Я бы предложил посмотреть formtastic

Он делает собрания переключателей и флажков намного проще и понятнее. Ваш код будет выглядеть так:

    <% semantic_form_for @widget, :html => {:class => 'my_style'} do |f| %>
<%= f.input :theme, :as => :radio, :label => "Theme:", 
:collection =>  [ 'plain', 'desert', 'green', 'corporate', 'funky' ] %>
<% end %>

Formtastic в значительной степени ненавязчивый и может смешиваться и сочетаться с "классическими" разработчиками форм. Вы также можете переопределить класс formtastic css для формы, как я сделал выше, с помощью   :html => {:class => 'my_style'}

Посмотрите на соответствующие Railscasts.

Обновление: недавно я перешел в Simple Form, который имеет похожий синтаксис к formtastic, но более легкий и особенно оставляет стиль для вашего собственный css.

Ответ 5

Хмм, из документов я не вижу, как вы можете установить ID на переключателях... метка атрибута пытается связать с ID на радио.

рельсы docs для radio_button_tag

Тем не менее, из документа, что первый параметр является "именем"... который, если это то, что он создает, должен группировать их все вместе. Если нет, может быть, это ошибка?

Хм, интересно, исправлены ли они: http://dev.rubyonrails.org/ticket/2879 http://dev.rubyonrails.org/ticket/3353