2012-05-18 2 views
0

Если у вас есть следующие модели:Вам нужно принадлежать? Через?

client has_many :projects 
project has_many :tasks 
tasks has_many :timeentries 

и

timeentries belongs_to :task 
task belongs_to :project 
project belongs_to :client 

Тогда вам нужна модель заявления, как:

timeentries belongs_to project :through => :tasks 
client has_many :tasks, :through => :projects 

Благодарности

ответ

0

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

Осознайте has_and_belongs_to_many: через который за исключением случаев, когда у вас есть много-ко-многим, используя промежуточную таблицу чисто для представления отношения поэтому посредник не нужен, это собственная модель.

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

Article    ArticleTag  Tag 
    Id     ArticleId  Id   
    Title     TagId   Text 
    Text 

Там одна статья может иметь много тегов, один тег может применяться ко многим статьям, поэтому вы не хотите связывать их в таблице. Таким образом, статья has_many Tags через ArticleTag.

This gives a handy summary ассоциаций в Rails.

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