Rails Bootstrap_form - переключатели, не отображающие название метки на странице шоу
У меня есть форма, созданная с помощью самоцвета bootstrap_form для ruby. в форме у меня есть несколько кнопок радио. форма отлично отображается с правильной маркировкой на странице редактирования формы, однако, как только я сохраняю форму и перехожу на страницу "показать", чтобы увидеть результаты, входные данные для переключателей показывают только значение переключателя (которые являются числами), а не имя пользовательской метки, которое я назначил. Как сделать так, чтобы пользовательский ярлык отображался вместо значения на странице показа?
Вот мой код:
_form.html.erb:
<%= f.form_group :gender, label: { text: "Gender" } do %>
<%= f.radio_button :gender, 0, label: "Female", checked: true, inline: true %>
<%= f.radio_button :gender, 1, label: "Male", inline: true %>
<% end %>
<%= f.form_group :nationality, label: { text: "Nationality" } do %>
<%= f.radio_button :nationality, 0, label: "Kuwaiti", checked: true, inline: true %>
<%= f.radio_button :nationality, 1, label: "Non-Kuwaiti", inline: true %>
<% end %>
show.html.erb
<p><strong>Full Name:</strong> <%= @profile.name %></p>
<p><strong>Civil ID no:</strong> <%= @profile.civil %></p>
<p><strong>Gender:</strong> <%= @profile.gender %></p>
<p><strong>Nationality:</strong> <%= @profile.nationality %></p>
<p><strong>Mobile no:</strong> <%= @profile.mobile %></p>
<p><strong>Personal Email:</strong> <%= @profile.personal_email %></p>
Спасибо за помощь в продвижении!
Обновить:-
Новый код формы: -
<%= f.form_group :gender, label: { text: "Gender" } do %>
<%= f.radio_button :gender, 1 %>
<%= f.label 'Female', inline: true, checked: true %>
<%= f.radio_button :gender, 0 %>
<%= f.label 'Male', inline: true %>
<% end %>
Попробовал это предложение, но все еще получал ту же проблему, только переключатели больше не в строке и имеют неправильное форматирование.
3 ответа
Вам нужен справочный стол
Вы сохранили числовые значения, которые соответствуют переключателю. Поэтому, когда вы отображаете переменную в show.htm.erb, она показывает числовые значения, полученные из записи базы данных. Это имеет смысл. Но вам нужна строка, связанная с номером, которая требует таблицы поиска
Создание ярлыков в форме не создает пользовательских ярлыков для вашего поля. Чтобы создать пользовательские метки полей, вам потребуется настроить локализации i18n для моделей activerecord, что является хорошим решением, но также и требует некоторого времени и обучения.
Создание таблицы поиска на основе хеша.
Активный хэш
Вы можете написать свой собственный помощник по поиску или использовать этот гем, который упрощает реализацию таблиц поиска на основе хеша.
пример
# in app/models/person.rb
class Gender < ActiveHash::Base
self.data = [
{:id => 0, :gender => "Female"},
{:id => 1, :gender => "Male"}
]
end
Из их спецификации
Мы написали ActiveHash, чтобы мы могли использовать простые структуры памяти, подобные ActiveRecord, которые хорошо работают с формами Rails...
Ошибка сборки в геме (обновление)
Я только что проверил, кажется, что их сборка имеет ошибку. Вероятно, лучше всего избегать пока.
Использование помощников вида для перевода логических значений в строки (добавлено)
Вы можете реализовать помощников в вашем /helpers/profile_helper.rb. Я называю их "поисками", но это, вероятно, не стандарт.
Для каждого логического значения вам нужно перевести в строку создать помощника
#profile_helper.rb
# Each of your booleans
def gender_to_s(value)
value ? "Male" : "Female"
end
def nationality_to_s(value)
value ? "Kuwaiti" : "Non-Kuwaiti"
end
# Generic true/false conversion
def boolean_to_s(value)
value ? "Yes" : "No"
end
Примечание: я бы назвал помощников последовательно, чтобы они соответствовали имени поля, так что, по вашему мнению, совершенно очевидно, какой "to_s" вызывать.
По вашему мнению
<p><strong>Gender:</strong> <%= gender_to_s(@profile.gender) %></p>
Примечание. Если вам нужен единственный помощник вида, это можно реализовать в application_helper.rb и включить переданный параметр "тип" в качестве элемента управления переключателем, но я думаю, что наиболее простым решением является создание помощника вида для каждого поля.
<label><%= form.radio_button :gender, 1, hide_label: true, inline: true%>Female</label>
<label><%= form.radio_button :gender, 0, hide_label: true, inline: true%>Male</label>
работал у меня Bootstrap 4.1
Вы хотите отдельный тег для меток. Вместо:
<%= f.radio_button :gender, 1, label: "Male", inline: true %>
Тебе нужно:
<%= f.radio_button :gender, 1 %>
<%= f.label 'Male, inline: true %>
Также стоит посмотреть на этот ответ: Bootstrap 3: работает ли горизонтальная форма для переключателей с меткой управления?
Он не использует помощник по меткам формы, но, похоже, он делает то, что вам нужно.
Хорошо, еще один подход, чтобы у вас был полный набор на выбор. В Rails 4.1 типы данных enum были реализованы в ActiveRecord, как описано в разделе 2.5 примечаний к выпуску. Если вы используете Rails 4.1+, вы можете воспользоваться этой новой функцией.
По сути, вам нужно будет написать миграцию, чтобы изменить ваши логические и другие типы данных на enum. Например, для примера пола, вместо того, чтобы иметь пол 0, обозначающий женщину, и 1, обозначающий мужчину, и поддерживать отображение для этого, вы могли бы просто иметь:
enum gender: [:female, :male]
и аналогично для других ваших атрибутов.
В конечном итоге это должно быть проще в обслуживании и поможет сделать код приложения максимально прозрачным.