#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 %>