В настоящее время я работаю над приложением Ruby on Rails, которое будет функционировать в некотором роде как сайт для социальных сетей. В рамках этого каждый пользователь на сайте будет иметь профиль, в котором они могут заполнить свою контактную информацию (номера телефонов, адреса, адреса электронной почты, работодателя и т. Д.).Хранение произвольной контактной информации в Ruby on Rails
Простым решением для моделирования было бы иметь столбец базы данных для каждой информации, которую я разрешаю пользователям вводить. Однако это кажется произвольным и ограниченным. Кроме того, чтобы позволить пользователям вводить столько телефонных номеров, сколько им нужно, необходимо добавить другую таблицу базы данных и присоединиться.
Мне кажется, что лучшим решением было бы сериализовать всю контактную информацию, введенную пользователем, в одно поле в своей строке. Поскольку я никогда не буду обучать SQL-запрос этой информации, такое решение не будет менее эффективным.
В идеале, я хотел бы использовать vCard как мой формат сериализации. vCards - это стандартное решение для хранения контактной информации в Интернете, а повторное использование протестированных решений - это хорошая вещь. Альтернативные форматы сериализации включают в себя просто маршалинг рубинового хэша или YAML. Независимо от формата сериализации, поддержка чтения и обновления этой информации в виде рельсов, похоже, является основной проблемой реализации.
Итак, вот вопрос: Кто-нибудь видел этот подход, используемый в приложении для рельсов? Существуют ли какие-либо плагины или драгоценные камни, которые делают такую систему простой в использовании?
В идеале, я бы хотел, чтобы act_as_vcard добавлял к моему объекту модели, который обрабатывал бы редактирование vcard для меня и сохранял его обратно в базу данных.
Мое отвращение не к объединению. Мое нежелание иметь таблицу для телефонных номеров, таблицу для адресов, таблицу для адресов электронной почты и т. Д. Использование vCard означает, что добавление возможности хранения нового типа информации - это просто изменение вида и не требует создание новой таблицы базы данных. Контактная информация сложная. Я считаю, что сложность заслуживает внимания на уровне приложений, а не на уровне базы данных. Изменения БД всегда более опасны и сложны, чем изменения в приложении, и я не знаю, что мои конкретные требования являются статическими. –