2013-04-22 5 views
0

Я создаю приложение Rails с ресурсом Contact, с адресами, состояниями и почтовыми полями. Также есть поля для ввода номера телефона. На форме с другого веб-сайта, который я использую для вдохновения, пользователи могут указать, является ли телефон мобильным, домашним или офисным, другими словами, типом номера телефона. Мне интересно, можно ли создавать поля, которые принимают больше информации о других полях на модели, или если в этом случае Телефон должен быть отдельной моделью (например, Contact has_many: phones) и типом телефонного номера как регулярное поле модели телефона.Атрибуты атрибутов в модели Rails

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

ответ

1

Использование другой модели - это вариант для достижения этой цели. Другой - создать Хэш, сохраняющий номера телефонов.

class Contact 
    attr_accessible :phones 
    serialize :phones, Hash 
end 

А затем вы можете хранить каждый телефон в соответствующей клавише, например.

contact = Contact.new 
contact.phones = {home: '1234-1234', work: '1234-5678', mobile: '9876-5432'} 
contact.save! 

И они будут доступны по Hash телефонам:

contact.phone[:home] # => "1234-1234" 

Обеспечивая команду serialize на модели, ActiveRecord упорядочивает его для того, чтобы хранить в базе данных.

Таким образом, он позволяет хранить массивы или хеши в базе данных при условии, что на его столе будет создано поле text.

Миграция будет:

rails g migration add_phones_to_contact phones:text 

Подробнее о серийности: api.rubyonrails.org/classes/ActiveRecord/Base.html

Смежные вопросы