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)

u 変数に User オブジェクトが含まれているだけの場合、このデータを取得するにはどうすればよいでしょうか。

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 に答える