Как найти все проекты, где клиент и пользователь вовлечены в Ruby on Rails - PullRequest
0 голосов
/ 30 сентября 2018

Сначала я хочу показать свои связанные модели как

#=> client.rb
class Client < ApplicationRecord
    has_many :client_assignments, dependent: :destroy
    has_many :projects, through: :client_assignments
end

#=> client_assignment.rb
class ClientAssignment < ApplicationRecord
    belongs_to :project
    belongs_to :client
end

#=> project.rb
class Project < ApplicationRecord
    has_many :client_assignments, dependent: :destroy
    has_many :clients, through: :client_assignments
    validates :client_assignments, presence: true

    has_many :user_assignments, dependent: :destroy
    has_many :users, through: :user_assignments
    validates :user_assignments, presence: true
end

#=> user.rb
class User < ApplicationRecord
    has_many :user_assignments, dependent: :destroy
    has_many :projects, through: :user_assignments
end

#=> user_assignment.rb
class UserAssignment < ApplicationRecord
    belongs_to :project
    belongs_to :user
end

Концепция: «Проект связан с client & current_user».

I 'Я борюсь за то, как найти current_user вовлеченных проектов, где client является определенным, Например: У меня есть client_id & 2, так как найти все проекты для этого клиента, гдесоответствие current_user.id.

Я не знаю, как я это описываю.

Пожалуйста, дайте мне знать, если у вас есть путаница.

1 Ответ

0 голосов
/ 30 сентября 2018

Я не проверял это, но мне кажется, что-то вроде этого должно работать:

current_user.projects.joins(:clients).where('clients.id = ?', client_id)

Вы хотите, чтобы все проекты были связаны с текущим пользователем, а затем находили всех клиентов, связанных с этимипроекты и фильтрация по конкретному client_id.

Это должно сделать то же самое и может быть быстрее, потому что избегает объединения:

current_user.projects.joins(:client_assignments).where(clients_id:client_id)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...