首先,我想像这样显示关联的模型
#=> 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
的项目”。
我一直在努力寻找current_user
涉及的项目,其中client
是特定的,例如:我有一个client_id
且其为{ {1}},因此我如何找到与此客户匹配的2
的所有项目。
我不知道如何形容。
如果您有任何困惑,请告诉我。
答案 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)