2010-06-05 1 views
1

У меня есть эти таблицы и отношения:рельсы: как я могу создать область активных отношений для перемещения многих таблиц?

user has_many projects 
project has_many tasks 
task has_many actions 

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

Благодаря

ответ

0

Я нашел что-то, что работает.

В модели действия:

def self.owned_by (user) 
    joins("join tasks on actions.task_id = tasks.id"). 
    joins("join projects on tasks.list_id = projects.id"). 
    where("projects.user_id = ?" , user.id) 
end 

С консоли:

u=User.find(1) 
Action.owned_by(u).count 

=> 521 # which is correct 

Я мот уверен, что его лучший способ сделать это, как я немного новичок в SQL. Я чувствую, что это можно сделать более кратким.

EDIT Немного лучше

Action.joins(:task => [{:project => :user }]).where(:projects => {:user_id => user.id }) 
0

Я не думаю, что прицелы для этого необходимы, если вы используете nested_has_many_through плагин.

+0

Спасибо за это. Я попробовал, но он не совсем работает. есть пользователь с двумя проектами, в общей сложности 80 задач, и эти задачи коллективно имеют 500 действий. Когда я запрашиваю user.actions, он возвращает задачи, а user.actions.count равен 80 –

+0

. Спасибо, Брайан. взгляните на этот плагин –

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