如何查找所有客户端和用户参与Ruby on Rails的项目

时间:2018-09-30 06:58:49

标签: ruby-on-rails ruby

首先,我想像这样显示关联的模型

#=> 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

概念是“涉及clientcurrent_user的项目”。

我一直在努力寻找current_user涉及的项目,其中client是特定的,例如:我有一个client_id且其为{ {1}},因此我如何找到与此客户匹配的2的所有项目。

我不知道如何形容。

如果您有任何困惑,请告诉我。

1 个答案:

答案 0 :(得分:2)

我还没有测试过,但是我觉得这样应该可以工作:

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

您希望所有与当前用户关联的项目,然后找到与这些项目关联的所有客户端,并按特定的client_id进行过滤。

这应该做同样的事情,并且可能更快,因为它避免了加入:

current_user.projects.joins(:client_assignments).where(clients_id:client_id)