0

我有一些 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 看起来像我需要的,他通过用户的客户端检查所有文件。

SELECT "files".* FROM "files" WHERE "files"."client_id" IN (1, 2)

但是如何获取这些数据,如果你的变量只包含用户对象?

4

2 回答 2

0

我没有找到任何解决方案,所以我通过在文件模型中添加范围来手动完成

scope :by_user_clients, lambda { |user| where(client_id:
user.clients.pluck(:id)) }


File.by_user_clients(@user)
于 2013-02-18T09:33:59.243 回答
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

我无法从您的帖子中看出,但您可能需要切换客户端和文件模型,因此客户端属于用户和文件,具体取决于您的情况。

于 2013-02-15T00:30:37.107 回答