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

Выровнять флажки для f.collection_check_boxes с помощью Simple_Form

Я использую RoR, и я использую жемчужину Simple_Form для своих форм. У меня есть объектное отношение, при котором пользователь может иметь несколько ролей, а во время создания администратор может выбрать, какие роли применить к новому пользователю. Я бы хотел, чтобы у Ролей был свой флажок слева, а их имя справа в горизонтальной компоновке.

// "box" Admin //

вместо текущего

//

"окно"

Администратор

//

Мой текущий код для отображения ролей - это.

  <div class="control-group">
    <%= f.label 'Roles' %>
    <div class="controls">
      <%= f.collection_check_boxes 
                 :role_ids, Role.all, :id, :name %>
    </div>
  </div>

Часть, на которую я больше всего зацикливаюсь, - это тот факт, что f.collection_check_boxes генерирует такой код.

<span>
  <input blah blah />
  <label class="collection_check_boxes" blah>blah</label>
</span>

Мне тяжело получить класс css, так как есть 3 компонента, которые нужно трогать. Я попытался добавить такие вещи, как фиктивные классы, в хеш: html, но класс фикчирования даже не отображается в отображаемом html.

Любая помощь приветствуется

EDIT: решение

Благодаря Baldrick мой рабочий erb выглядит так.

<%= f.collection_check_boxes :role_ids, Role.all, :id, :name,
      {:item_wrapper_class => 'checkbox_container'} %>

И мой CSS выглядит следующим образом

.checkbox_container {
  display: inline-block;
  vertical-align: -1px;
  margin: 5px;
 }
.checkbox_container input {
  display: inline;
 }
.checkbox_container .collection_check_boxes{
  display: inline;
  vertical-align: -5px;
 }
4b9b3361

Ответ 1

В соответствии с doc из collection_check_boxes есть опция item_wrapper_class, чтобы дать класс css для диапазона, содержащего этот флажок. Используйте его так

<%= f.collection_check_boxes :role_ids, Role.all, :id, :name, :item_wrapper_class => 'checkbox_container' %>

И стиль CSS, чтобы сохранить флажок и метку в одной строке:

.checkbox_container input {
  display: inline;
}

Ответ 2

С помощью Bootstrap вы можете:

<%= f.collection_check_boxes :role_ids, Role.all, :id, :name, :item_wrapper_class => 'inline' %>

Ответ 3

В последней ветке 2.1.0 SimpleForm с 2.3.1.0 bootstrap-saas, установленной с параметром bootstrap, метод collection_check_boxes привел к некоторым промежуткам, к которым применение класса оболочки inline не имело хорошего эффекта.

Мне удалось получить форму, чтобы она идеально соответствовала стандартной методологии ввода, коллекции, as = > : check_boxes. Затем встроенный стиль работал отлично:

<%= f.input :roles, :collection => valid_roles, :label_method => :last, :value_method => :first, :as => :check_boxes, :item_wrapper_class => 'inline'  %>

Мои роли - простой массив массивов со значением, меткой. Надеюсь, это поможет.

Ответ 4

Это была первая страница SO для поиска DDG с "rails collection_check_boxes bootstrap", но это не о Bootstrap, но в любом случае это решение для Bootstrap 4.

Это работает с обычными Rails и Bootstrap 4, никакой жемчужины не требуется. collection_check_boxes - простой метод Rails.

  .form-group
    =f.label :industry_interest
    %br
    =f.collection_check_boxes :industry_interest, Industry.all, :id, :name do |cb|
      =cb.check_box 
      =cb.label
      %br

или

  .form-group
    =f.label :industry_interest
    =f.collection_check_boxes :industry_interest, Industry.all, :id, :name do |cb|
      .form-check
        =cb.label class: 'form-check-label' do
          =cb.check_box class: 'form-check-input'
          =cb.text 

Они выглядят одинаково.

https://v4-alpha.getbootstrap.com/components/forms/#checkboxes-and-radios