0

STI との関連付けを使用する検索ロジック検索を実装しようとしていますが、STI レコードをサブクラスではなく親として選択するという問題があります。

例:

class Users
end

class Artist < User has many :agents, :through => :agents artists end

class Agent < User has many :artists, :through => :agents artists end

「ようなアーティストエージェント会社」を検索すると、エージェントとしてではなくユーザーとしてのエージェントに基づいて検索されます。

select * from users WHERE users.company LIKE

それよりも

select * from users AS agents WHERE agents.company LIKE

ActiveRecord クラス レベルでこの問題を回避できるかどうか疑問に思っています (たとえば、アソシエーションでは、エージェントが :as=>:agent またはそれらの行に沿ってロードされることを指定できるかどうかを考えていました)、または検索ロジックにパッチを当てる必要があるか、これを達成するために他に何ができるか.

私が思いついたもう 1 つのオプションは、ユーザーの代理店のリストを含むフィールドをユーザー テーブルに追加することです。例 users.agencies => エージェンシー 1 の名前、エージェンシー 2 の名前

4

1 に答える 1

0

うまく機能していると思われる解決策を見つけたので、アーティスト クラスに名前付きスコープを追加しました。

名前付きスコープ : エージェンシー インクルード、ラムダ { |c| { :joins=> :agents,:conditions => { :agents users => { :company => c } } } }

検索フィールドは検索と呼ばれるようになりました[アーティストエージェンシーが含まれます]

于 2009-09-07T23:12:32.207 に答える