2016-07-07 6 views
0

У меня есть модель polymorphicDocument и несколько моделей с документами, связанными. Одна из которых - модель CustomerPlan, которая has_many documents, as: :linkable. Это прекрасно работает.Полиморфная модель и has_many через

Кроме того, у меня есть модель Company, которая has_many :customer_plans. Поскольку такой экземпляр Компании также должен иметь много документов. Как правильно настроить отношение has_many между моделью Company и моделью Document?

В настоящее время:

схемы:

create_table "documents", force: :cascade do |t| 
    t.json  "links" 
    t.integer "linkable_id" 
    t.string "linkable_type" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
    end 

    add_index "documents", ["linkable_type", "linkable_id"], name: "index_documents_on_linkable_type_and_linkable_id", using: :btree 

Модели:

class Document < ActiveRecord::Base 
    belongs_to :linkable, polymorphic: true 
    belongs_to :user 
    belongs_to :company 

    mount_uploaders :links, DocUploader 
end 



class CustomerPlan < ActiveRecord::Base 
    belongs_to :company 
    has_many :documents, as: :linkable 
    accepts_nested_attributes_for :documents 
end 

class Company < ActiveRecord::Base 
    has_many :customer_plans 
    has_many :documents 
end 

ответ

0

Согласно моему пониманию вашего вопроса,

Company если has_many :customer_plans и CustomerPlanhas_many :documents, то вам может иметь Companyhas_many :documents, through: :customer_plans

+0

Компания может также иметь документы через другие модели (отсюда и полиморфизм), если вы указываете для каждой ассоциации has_many отдельно? – Matthias

0

Я считаю, что вы должны быть в состоянии сделать что-то вроде:

class Company < ActiveRecord::Base 
    has_many :customer_plans 
    has_many :documents, through: :customer_plans 
end 

UPDATE

на основе новой информации компании, имеющей другие документы, с помощью других ассоциаций, я бы вероятно, идут так:

class Company < ActiveRecord::Base 
    has_many :customer_plans 
    has_many :customer_plan_documents, through: :customer_plans, source: :documents 
    # you can later do other document associations here 
end 

Сообщите мне, если это работы

+0

Компания также может иметь документы через другие модели (отсюда и полиморфизм), если вы укажете для каждой ассоциации has_many отдельно? – Matthias

+0

Обновлен мой ответ, чтобы отразить подход, который я, вероятно, следовал бы для достижения этого – oreoluwa

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