我有一些AR模型
User
has_many :clients, :through => :users_to_clients
has_many :files
Client
has_many :users_to_clients
has_many :users, :through => :users_to_clients
has_many :files
File
belongs_to :client
belongs_to :user
并尝试通过分配给用户
的客户端获取所有文件u = User.includes(:clients => :xls_files).find(1)
此代码触发3个sql查询。在最终的sql看起来像我需要的那样,他通过用户的客户端fecth所有文件。
SELECT "files".* FROM "files" WHERE "files"."client_id" IN (1, 2)
但如果你的变量只包含User对象,如何获取这些数据?
答案 0 :(得分:0)
试试这个
User
has_many :files
has_many :clients, :through => :files
Client
has_many :files
has_many :users, :through => :files
File
belongs_to :users
belongs_to :clients
然后您可以执行@user.clients
和@client.users
我无法从您的帖子中了解到,但您可能需要切换客户端和文件模型,因此客户端属于用户和文件,具体取决于您的具体情况。
答案 1 :(得分:0)
我找不到任何解决方案,所以我通过在文件模型中添加范围来手工制作
scope :by_user_clients, lambda { |user| where(client_id:
user.clients.pluck(:id)) }
File.by_user_clients(@user)