如何检查 Rails 中的关联属性?

How can I check associated attributes in Rails?

我有以下关系

User has_many Clients ClientMemberships

Client has_many Projects

Project belongs_to Client

给定一个特定的用户。为具有特定项目 ID 的用户查找所有客户的最佳方法是什么。

我不想遍历所有项目并使用 ruby 检查每个项目,而不是使用一些 SQL 来完成预加载的工作。

class User
  def clients_for_project_id(project_id)
    clients.joins(:projects).where(projects: { id: project_id })
  end
end
@user.clients.joins(:projects).where("projects.id = ?", your_project_id)

这很简单,使用 joins 在另一个 table 上执行条件,并使用 inculdes 进行预先加载。

user.clients
  .joins(:projects)
  .includes(:projects)
  .where(projects: { id: project_id })