1

active_recordが生成するエイリアスを取得するにはどうすればよいですか?3つの引数を取るメソッドtable_alias_ofを作成したいと思います

  1. クエリが実行されるモデル
  2. インクルードハッシュ
  3. アソシエーションのパス

条件または順序で関連付けに対処するため。

例:すべてに、同じテーブル「連絡先」へのポイントが含まれます。

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ロジックをコピーしているだけです。
4

0 に答える 0