Метки, отображаемые для флажка множественности форм

#ruby-on-rails #ruby #forms

#ruby-on-rails #ruby #формы

Вопрос:

Я создаю форму с несколькими флажками, параметры которых представляют собой список ролей пользователей, на мой взгляд, следующим образом:

         <% roles = User.roles %>
        <% roles.each do |role| %>
          <%= f.label roles.each do %>
            <%= f.check_box :role, { multiple: true }, role, nil %>
          <% end %>
        <% end %>
  

Проблема, с которой я сталкиваюсь, заключается в том, что флажки создаются, и каждой флажке соответствует правильная роль пользователя (что подтверждается с помощью инструментов разработчика), но я не могу заставить метки отображаться рядом с флажками.

Вывод User.roles выглядит следующим образом:

 {"admin"=>0, "developer_admin"=>1, "division_admin"=>2, "development_admin"=>3, "site_admin"=>4}
  

Какую очевидную вещь я здесь упускаю из виду?

Ответ №1:

Мне кажется, что проблема исправлена приведенным ниже изменением:

Изменения, основанные на вашем последнем обновлении: User.roles это хэш, который мы разрушаем и передаем следующим образом:

     <% roles = User.roles %>
    <% roles.each do |name, value| %>
      #                v here v
      <%= f.label :role, name %>
      <%= f.check_box :role, { multiple: true }, value, nil %>
    <% end %>
  

Скорее всего, вы передаете Enumerator метке, а не самой роли. Попробуйте вызвать User.roles.each в консоли без блока, вы получите что-то вроде: #<Enumerator: ...> .

В качестве краткого примечания, предпочтительно выполнять назначение вне представления: вам было бы лучше назначить @roles = User.roles в вашем контроллере и использовать переменную экземпляра в вашем представлении.

Надеюсь, это поможет — дайте мне знать, как у вас дела.

Комментарии:

1. Спасибо, что ответили так быстро. Модель, которую я использую для создания флажков, является User, а роль является столбцом в модели user. С указанным выше изменением я получаю следующую ошибку: неопределенное `имя’ метода для [«admin», 0]:Array

2. Добро пожаловать @DevCF 🙂 Не могли бы вы оказать мне услугу и отредактировать свой вопрос, чтобы включить выходные данные User.roles пожалуйста? Напишите мне комментарий, когда закончите, и я обновлю свой ответ.

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

4. Спасибо, я включил вывод User.roles. Я попытался обновить свой код в соответствии с вашим предложением, но по-прежнему безуспешно, метки не отображаются (но ничего не ломается, что, по крайней мере, является положительным?).

5. Спасибо за обновление @DevCF — попробуйте вышеуказанное, это должно сработать для вас 🙂

Ответ №2:

Мой код похож на ответы SRack, но я настроил его для вывода хэша и отредактировал имя роли, так что мы можем щелкнуть по тексту, и он активирует опцию 🙂

 <% User.roles.each do |name, value| %>
  <%= f.label "role_#{value}" do %>
    <%= f.check_box :role, { multiple: true }, value, nil %>
    <%= name %>
  <% end %>
<% end %>