Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby On Rails > Глюк выпадающего списка select


Автор: m_maxser 2.7.2012, 09:54
Здравствуйте.

Есть модель User с полем email_options, поле хранит настройки email рассылки. Чтобы изменить настройки, пользователь заходит в личный кабинет, где выбирает их из выпадающего списка. Список создается так:

Код

<%= select(:user, :email_options,
  [
    ['Опция 1', 0],
    ['Опция 2', 1],
    ['Опция 3', 2],
    ['Опция 4', 3]
  ])
%>


Локально (W7, mysql), все работает как надо. А вот на сервере (Linux, Oracle) есть проблема с отображением. Например если у пользователя в БД, поле "email_options" хранит значение "2", то по при генерации списка, "Опция 3" должна помечаться как selected="selected". Но этого не происходит. Из-за этого всегда отображается первый элемент списка ("Опция 1"). При этом сохранение в БД работает. Я без проблем выбираю элемент, жму "сохранить" и значение в БД меняется. 

В чем может быть причина?

Автор: m_maxser 2.7.2012, 14:29
пожалуйста помогите разобраться

Автор: source777 2.7.2012, 17:39
В приведённом тобой примере надо вручную указывать текущее значение, после опций {:selected => value} 
Но лучше использовать хелперы из модуля FormBuilder, которые автоматически подставляют значения атрибутов на основе созданного в контроллере объекта. Подробно описано в  http://guides.rubyonrails.org/form_helpers.html#select-boxes-for-dealing-with-models.

Автор: m_maxser 3.7.2012, 14:25
Так мой пример полностью соответствует тому, что написано в Rails Guides.
первый параметр для работы с конкретной моделью
второй - поле этой модели
третий - массив значений, который может принимать это поле.

И если второй параметр уже содержит значение, то соответствующий элемент из массива помечается как "selected". Пример нормально работает локально. Глюк только на хостинге был.

Проблему можно сказать решил, все дело в моей невнимательности и лени :(. По моему это было из-за того, что когда я добавлял новое поле в модель User, миграцию запустил только на локали. На сервере было лень (живая БД и т.п.), так что я просто закомитил миграцию, без ее запуска. Поле добавил вручную. Я так уже делал раньше, все было нормально. При этом все нормально сохранялось. 

Обнаружил причину, когда запустил копию проекта с другой БД, но уже через миграции. Там все работало. А сервер тотже, все такое же smile.

Вот! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)