Rails - должны ли типы объектов быть в его собственной модели? - PullRequest
0 голосов
/ 03 февраля 2010

У меня есть контакт, и контакт has_many: телефоны. В таблице телефонов есть столбец с именем phones_desc, в котором я хочу указать тип телефонного номера, который пользователь сохранил.

Мой вопрос / Лучшая практика

Должен ли я предоставить выбор с предоставленными вручную опциями (такими как «мобильный», «работа», «дом») ...

-или-

... создайте новую модель phones_types, в которую я могу добавить нужные значения, создавая уникальный идентификатор для каждого. Затем я могу сделать следующее после изменения phone_desc на phone_type_id, добавления телефонов has_many: phone_types и присвоения таблице phone_types столбца имени:

@phone = Phone.first
@phone.type.name

Sidenote

В настоящее время я делаю это с первым вариантом (не отдельной моделью), и у меня возникают проблемы с выбором значения при переходе к редактированию родительского объекта. Другими словами, у опций выбора нет сохраненного значения, выбранного при редактировании телефонных номеров.

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

Если первый вариант на самом деле является лучшим способом выбора, вы хотите узнать, как получить значение объекта в качестве выбранного значения при редактировании описаний телефонов с помощью выбора?

Ответы [ 2 ]

0 голосов
/ 03 февраля 2010

Я бы все равно выбрал отдельную модель для типа телефона. Таким образом, вы можете легко добавить другие типы телефонов позже. Также подумайте о i18n, он может избавить вас от головной боли при переводе «Mobile» на японский язык.

0 голосов
/ 03 февраля 2010

Оказывается, что первый вариант работает просто отлично, и я могу заставить выбранный вариант работать тоже. Это была проблема в том порядке, в котором я предполагал параметры опции.

Я изменил:

<%= f.select :number_desc, '<option value="mobile">Mobile</option><option value="work">Work</option><option value="home">Home</option><option value="other">Other</option' %>

до:

<%= f.select :number_desc, [["Mobile", "mobile"], ["Work", "work"], ["Home", "home"], ["Other", "other"]] %>

И вуаля - выбрано отлично работает. :)

...