0

私はこの古いRails2のものを、Rails3.2.1で動作するように書き直そうとしています。

Rails2.2.2を書き換えるクエリ

 B2bPrivilege.find_by_sql("SELECT b2b_privileges.*, vendors.name AS vendor_name FROM b2b_privileges LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id WHERE b2b_user_id = ?", current_user_id)

これは私が思いついたものであり、上記のRails 2.2.2の例で見られるのと同じSQLを作成しますが、保存された結果にvendors.name列が取り込まれず、理由がわかりません。データベースコンソールで実行したときに生成されたSQLは機能するため、問題は間違いなくRailsに関連しています。

    B2bPrivilege.select("b2b_privileges.*, vendors.name AS vendor_name").joins('LEFT JOIN  vendors ON vendors.id = b2b_privileges.vendor_id').where('b2b_user_id' => current_user_id)

.inspectからのデバッグ情報

  B2bPrivilege Load (1.4ms)  SELECT b2b_privileges.*, vendors.name AS vendor_name FROM "b2b_privileges" LEFT JOIN vendors ON vendors.id = b2b_privileges.vendor_id WHERE "b2b_privileges"."b2b_user_id" = 398
[ 
    #<B2bPrivilege id: 1363, b2b_user_id: 398, vendor_id: 53, can_setup_instant_electronic_delivery: true, can_setup_purchase_orders: true, can_setup_advance_ship_notification: true, can_setup_xml_pushes: true>, 
    #<B2bPrivilege id: 1923, b2b_user_id: 398, vendor_id: 103, can_setup_instant_electronic_delivery: false, can_setup_purchase_orders: false, can_setup_advance_ship_notification: true, can_setup_xml_pushes: true>
]
4

2 に答える 2

1

結合されたコンテンツがコンソールに出力されず、プライマリ リレーションだけが出力されることがわかりました。コンソール ウィンドウで出力を表示している場合、コンソール出力は返されたルート レベル オブジェクトのみを反映/検査していると思います。

これは、結合を使用するクエリをデバッグしていたときの落とし穴でした

于 2013-03-13T17:43:52.020 に答える
0

行う

B2bPrivilege.joins('LEFT JOIN  vendors ON vendors.id = b2b_privileges.vendor_id').
  where(:b2bprivileges => {'b2b_user_id' => current_user_id} ).
  select("b2b_privileges.*, vendors.name AS 'vendor_name'").first.vendor_name
于 2013-03-12T20:36:07.950 に答える