Радиокнопки на Rails - PullRequest
       19

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

57 голосов
/ 08 марта 2009

Аналогично этому вопросу: Флажки на 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>

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

Ответы [ 5 ]

75 голосов
/ 08 марта 2009

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

<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]
37 голосов
/ 25 июля 2009

То же, что и буквы 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>
8 голосов
/ 07 февраля 2012

Использование 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 голосов
/ 12 июня 2010

Я бы посоветовал взглянуть на 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.

Обновление: я недавно перешел на Простую форму , синтаксис которой похож на formtastic, но более легкий и, в особенности, оставляет стиль для вашего собственного CSS.

1 голос
/ 08 марта 2009

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

рельсовые документы для radio_button_tag

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

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

...