Флажки коллекции simple_form добавляют неожиданные значения в базу данных

Среда: Rails 3.2.1
SimpleForm 2.0.1
Я встречал пользователей здесь и в других местах, которые задавали подобные вопросы через Google, но я еще не нашел ответов!

Я хочу предоставить ряд флажков для определения предпочтений контакта.
Я создал небольшое тестовое приложение, используя то, что заметил в демонстрационном приложении simple_form.

Моя модель контактов имеет строковый атрибут с именем «post_pref».

В ContactsHelper я включил это:

def contact_preference_options
  ['High Resolution','Web Resolution','Browser','Hard Copy Proof']
end

В моем частичном _form я включаю это:

<%= f.input :post_pref, :collection => contact_preference_options, :as => :check_boxes %>

Я запустил сервер и создал новый контакт.

В представлениях New и Edit отображаются флажки. Я отметил «Браузер» в качестве предпочтения для моего нового контакта и отправил его.
Результат проверки одного или нескольких предпочтений — беспорядок.

Во-первых:
когда я редактирую запись, текущие настройки не проверяются.

Во-вторых:
В представлениях "Показать" и "Индекс" я вижу следующее:

--- - Browser - ''

В консоли вижу это:

---\n- Browser\n- ''\n

Я хочу увидеть следующее:

Browser

Мои вопросы:
Откуда берутся тире?
Откуда берутся новые строки?
Почему там пустая строка?
Почему ранее установленные флажки не проверяются при редактировании Контакт?

Примечание: когда я делал вышеперечисленное с переключателями или выбирал варианты, все работало нормально. Но я хочу, чтобы у контакта потенциально было несколько предпочтений, поэтому мне нужны флажки.

Интересно, что я попробовал то же самое с formtastic вместо simple_form и получил почти идентичные результаты. В чем прикол флажков?

Миллион благодарностей за любую помощь.


person user209835    schedule 24.03.2012    source источник


Ответы (1)


Для меня это выглядело как сохранение массива, поэтому я сделал некоторую предварительную обработку параметров перед его сохранением:

lifestyle = params[:lifestyle]
lifestyle[:languages] = lifestyle[:languages].reject(&:blank?).join(",")
if @lifestyle.update_attributes(lifestyle)
...

В этом примере мои флажки были языками в соответствии с моделью образа жизни. Надеюсь это поможет.

person Ashish Bhutiani    schedule 14.04.2012