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>&nbsp;&nbsp;<%= @profile.name %></p>
    <p><strong>Civil ID no:</strong>&nbsp;&nbsp;<%= @profile.civil %></p>
    <p><strong>Gender:</strong>&nbsp;&nbsp;<%= @profile.gender %></p>
    <p><strong>Nationality:</strong>&nbsp;&nbsp;<%= @profile.nationality %></p>
    <p><strong>Mobile no:</strong>&nbsp;&nbsp;<%= @profile.mobile %></p>
    <p><strong>Personal Email:</strong>&nbsp;&nbsp;<%= @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>&nbsp;&nbsp;<%= 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]

и аналогично для других ваших атрибутов.

В конечном итоге это должно быть проще в обслуживании и поможет сделать код приложения максимально прозрачным.

Другие вопросы по тегам