active_recordが生成するエイリアスを取得するにはどうすればよいですか?3つの引数を取るメソッドtable_alias_ofを作成したいと思います
- クエリが実行されるモデル
- インクルードハッシュ
- アソシエーションのパス
条件または順序で関連付けに対処するため。
例:すべてに、同じテーブル「連絡先」へのポイントが含まれます。
includes = ["end_user", "reseller", "distributor"]
e = table_alias_of(Maintenance, includes, "end_user")
e #=> contacts
r = table_alias_of(Maintenance, includes, "reseller")
r #=> maintenances_contacts
d = table_alias_of(Maintenance, includes, "distributor")
d #=> maintenances_contacts_2
Maintenance.all(
:include => includes,
:conditions => ["#{d}.name=?", x],
:order => "#{r}.name, #{e}.name"
table_alias_ofを実装するにはどうすればよいですか?レール2.3.xおよびレール3.1.xと互換性がある必要があります
私がすでにした/考えたことは
- レールがfrom句の文字列を生成し、それを正規表現で解析できるようにします。しかし、これはrails 3/arelに切り替えると壊れます。
- テーブルエイリアスを指定するため、自分自身から:joinまたは:fromを記述します。しかし、これはコードをより複雑にします
- :includeを解析し、コードを使用して結合を生成します。それはarロジックをコピーしているだけです。