Поддержите несколько моделей с помощью волшебства или волшебства?
- У меня есть пользователи и контакты.
- Пользователи входят в свою учетную запись и могут создавать адресные книги, из которых они добавляют контакты.
- Если они делятся чем-то с контактом, этот контакт должен войти в систему для просмотра.
Пользователи уникальны в БД (хранятся в таблице пользователей), а контакты хранятся в таблице контактов и являются уникальными только для данной адресной книги.
В настоящее время я использую драгоценный камень Sorcery для пользователей, который отлично работает. Тем не менее, как я могу расширить это для поддержки аутентификации для контакта для входа в систему?
Я немного читал об этом через STI или полиморфную настройку, но неясно, каков общий шаблон для чего-то подобного.
Могу ли я просто использовать обе модели Sorcery? Или это анти-паттерн?
Заранее спасибо!
1 ответ
Почему вы используете отдельную модель для контактов? Почему бы просто не настроить самостоятельное соединение, как:
has_many :contact_entries, :class_name => "ContactEntry"
has_many :contacts, :through => :contact_entries
Ваша пользовательская таблица будет выглядеть так же, но у вас будет такая модель соединения, как:
class ContactEntry < ActiveRecord::Base
belongs_to :user
belongs_to :contact, :foreign_key => "contact_id", :class_name => "User"
end
Который будет иметь поля user_id и contact_id.
Обновить
Хорошо, я вижу вашу проблему сейчас. Я не думаю, что это будет возможно с колдовством, по крайней мере, без внесения существенных изменений в само колдовство. Волшебство определяет единственную аутентифицируемую модель в файле initializer.rb.
Authlogic, однако, может быть перенесен в любую модель с помощью "activ_as_authentic", так что это реальное решение ваших потребностей. Недостатком является то, что authlogic, похоже, не разрабатывается активно. Тем не менее, 10 дней назад его активность была довольно высокой, так что определенно стоит посмотреть.