Я пытался перестановки других (очень) похожих ответов здесь, на SO, но не получил этого щелчка, и я чувствую, что я близок.Определение нескольких (похожих) отношений между двумя моделями в Rails
Я хотел бы связать модель пользователей с моделью категории двумя различными способами в зависимости от того, какой канал уведомлений (текст или адрес электронной почты) требуется пользователю для каждой категории. Пользователи могут иметь много категорий, и наоборот.
Желаемый результат:
>>@user.textcategories
=>#<ActiveRecord::Associations::CollectionProxy []>
Категорий.
>> @user.emailcategories
=>#<ActiveRecord::Associations::CollectionProxy []>
Категории.
>> @user.emailcategories << Category.first
>> @user.textcategories << Category.third
т.д.
Текущий код:
class User < ActiveRecord::Base
has_many :emailcategories
has_many :categories, through: :emailcategories
has_many :textcategories
has_many :categories, through: :textcategories
end
class Category < ActiveRecord::Base
has_many :emailcategories
has_many :users, through: :emailcategories
has_many :textcategories
has_many :users, through: :textcategories
end
class Emailcategory < ActiveRecord::Base
belongs_to :user
belongs_to :category
end
class Textcategory < ActiveRecord::Base
belongs_to :user
belongs_to :category
end
Миграция/схема:
create_table "emailcategories" do |t|
t.integer :user_id
t.integer :category_id
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table "textcategories" do |t|
t.integer :user_id
t.integer :category_id
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
create_table :users do |t|
t.string :name
end
create_table :categories do |t|
t.string :name
end
Текущее сообщение об ошибке: >> @user.emailcategories << Category.first
ActiveRecord :: AssociationTypeMismatch: Emailcategory (# 70239513207200) ожидается, получил Категория (# 70239513077640)
Github клонировать и попробовать: https://github.com/Grantimus9/TestRels
Спасибо!
Это путь - это позволяет мне легко добавлять новые отношения между двумя моделями в будущем, расширяя категорию так же, как, например, E-MailCategoryUser расширяет CategoryUser. –