Tinyint и выберите тег с Rails в выборе пола - PullRequest
3 голосов
/ 15 февраля 2012

В базе данных я храню 0, если пол женский, и 1, если пол мужской.

У меня есть поле формы, подобное этому:

<%= myobject.select(:gender, options_for_select([['Male', 1], ['Female', 0]]), {:prompt => 'Select Gender'})%>

, которое хорошо работает, когда:

  1. Поле не существует в объекте, в котором он выбрал опцию «Выбрать пол» (без значения).
  2. Поле в базе данных выбрало опцию «Мужской»

Однако, если в поле указано «Женский», отображается параметр «Выбрать пол».Я полагаю, это потому, что 0 в базе данных считается ложным, когда извлекается (потому что Rails предполагает, что 0 в Mysql ложно), и поэтому при выборе он думает, что должен запросить текст, не имеющий значения.

Как следуетЯ имею дело с этой ситуацией, предполагая, что не могу коснуться структуры базы данных.

1 Ответ

2 голосов
/ 16 февраля 2012

переместил это в ответ вместо комментария, поскольку это на самом деле необязательный способ сделать это, если вы не можете изменить схему.

Если вы можете изменить это: string,: length => 1# (M / F)

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

myobject.rb

def m_f
  myobject.gender ? 'M' : 'F'
end

attr_accessor :gender_string


before_save :convert_gender
def convert_gender
  self.gender = myobject.gender_string == 'M' ? 1 : 0
end

_form.html.erb

<%= myobject.select(:gender_string, options_for_select([['Male', 'M'], ['Female', 'F']]), {:prompt => 'Select Gender', :selected => myobject.m_f})%>

Затем вам нужно будет снова преобразовать данные после отправки формы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...