Ruby-On-Rails как сделать так, чтобы логический выбор пола из переключателя отображался как строка (M или F) в show.html

#ruby-on-rails #boolean

#ruby-on-rails #логическое

Вопрос:

При создании нового пользователя они выбирают мужчину женского пола с помощью переключателя. Когда я перехожу к просмотру шоу, их пол отображается как true или false, а не как мужской или женский.

 _form.html.erb
  <%= f.label :gender %><br />
 <%= f.label :gender, "Male", :value => "true"  %>
<%= f.radio_button :gender, true %>
<%= f.label :gender, "Female", :value => "false" %>
<%= f.radio_button :gender, false %>


Show.html.erb
<p>
  <strong>Gender:</strong>
  <%= @user.gender %>
</p>
  

Ответ №1:

Не используйте логическое значение для представления пола.

В мире довольно много стран (Австралия, Германия и т.д.), Которые позволяют вам на законных основаниях иметь другие полы, кроме женского или мужского. Я не хочу отвлекаться на политическую дискуссию, но использование логических значений для всего, что на самом деле не является логическим условием, не является хорошей идеей.

Если вам нужен последний аргумент, почему вы не должны использовать логическое значение, рассмотрите это:

 User.find(1).gender?
  

Каково возвращаемое значение этого выражения?

Вместо этого используйте an enum . Это означает, что вы должны использовать целочисленный столбец в базе данных.

 class User < ActiveRecord::Base
  enum gender: [:undisclosed, :female, :male, :other]
end
  

Это позволит вам:

 user.male?
User.female # User.where(gender: :female)
user.female! # Makes a user female.
  

Для создания переключателей вы бы использовали:

 <%= radio_button_tag(:gender, "male") %>
<%= label_tag(:gender_male,   "Male") %>
<%= radio_button_tag(:gender, "female") %>
<%= label_tag(:gender_female, "Female") %>
  

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

1. Я ценю то, что вы говорите, это всего лишь назначение uni. Если бы это было реальное веб-приложение, которое я создавал, конечно, я бы не стал делать пол логическим, но я уже это сделал, и я не хочу удалять свой эшафот и переделывать много работы.

2. Изменение одного столбца вряд ли является большой работой. У вас нет каркаса с нуля — просто создайте миграцию для изменения таблицы.

3. О, я этого не понимал. Как мне это сделать?

4. Если это поможет, пожалуйста, задайте новый вопрос