2015-08-11 4 views
0

У меня есть следующие соотношенияКак проверить связанные атрибуты в Rails?

Userhas_manyClientsчерезClientMemberships

Clienthas_manyProjects

Projectbelongs_toClient

Предоставлено конкретному пользователю. Каков наилучший способ найти всех клиентов для пользователя с определенным идентификатором проекта.

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

ответ

2
@user.clients.joins(:projects).where("projects.id = ?", your_project_id) 
+0

, так как я исправил свой ответ, я думаю, ваш ответ был первым :) –

1
class User 
    def clients_for_project_id(project_id) 
    clients.joins(:projects).where(projects: { id: project_id }) 
    end 
end 
+0

с другой стороны, у вас есть не трудно закодированный способ написания «где» заявление :) –

+0

Хотя, насколько я могу видеть здесь http://apidock.com/rails/ActiveRecord/QueryMethods/where (пример: User.joins (: posts) .where ({posts: {published: true}})), вы должны иметь «где (проекты:« а не »где (проект:». –

+0

вы правы , спасибо! –

-1

Это довольно просто, используйте joins для выполнения условия на другом столе, и inculdes для нетерпеливой загрузки.

user.clients 
    .joins(:projects) 
    .includes(:projects) 
    .where(projects: { id: project_id }) 
Смежные вопросы