2013-05-22 5 views
0

Я изо всех сил пытаюсь разработать/запросить мой db в новом приложении Rails. Это то, что я имею в месте прямо сейчас:Есть ли лучший способ структурировать эти таблицы базы данных?

documents: 
    title 
    has_many :document_sections 

document_sections: 
    belongs_to :document 
    habtm :resources 

resources_document_sections: 
    belongs_to :resource 
    belongs_to :document_section 

resources: 
    text 

Так легко сказать document_section.resources. Но document.resources дает мне неприятность

Единственным способом я нашел, чтобы сделать это до сих пор, чтобы собрать документ раздел идентификаторов, а затем запустить второй запрос:

d = Document.last 
s_ids = d.document_section_ids 

Resource.joins(:document_sections) 
     .where(document_sections: { id: s_ids }) 
     .uniq 

Так что начинается плохо, и ухудшается по мере усложнения запросов. Это становится настоящей головной болью каждый раз, когда приходится прикасаться к этим отношениям.

Мне интересно, есть ли другой шаблон, который я мог бы проследить при выкладке этих таблиц, так что запрос против них не является такой головной болью? Или есть лучшая стратегия запросов, которую я пропускаю?

ответ

1

У вашего документа нет никаких отношений. Вам нужно добавить что-то к модели в отношениях, вы не можете просто добавить его в document_sections и ожидать documents, чтобы иметь какие-либо отношения ни к чему.

Вы должны добавить has_many ... through: к документу:

class Document < ActiveRecord::Base 
    has_many :document_sections 
    has_many :relationships, through: :document_sections 
end 
+0

К сожалению о том, что я забыл добавить в 'has_many' на документе. «Has_many: through» делает именно то, что я хочу, хотя ... Я удивлен! По какой-то причине я думал, что это не будет отслеживать отношения «многие-ко-многим». Благодаря! – Wheeyls

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