Ruby on rails 3 将SQL重写为ActiveRecord
我正试图重写旧的Rails 2内容,使其与Rails 3.2.1兼容: Rails 2.2.2要重写的查询 这就是我想到的,它创建了与上面Rails 2.2.2示例中相同的SQL,但它没有将vendors.name列引入存储结果,我不知道为什么。在数据库控制台中运行时生成的SQL确实有效,因此问题肯定与Rails有关Ruby on rails 3 将SQL重写为ActiveRecord,ruby-on-rails-3,activerecord,rails-activerecord,Ruby On Rails 3,Activerecord,Rails Activerecord,我正试图重写旧的Rails 2内容,使其与Rails 3.2.1兼容: Rails 2.2.2要重写的查询 这就是我想到的,它创建了与上面Rails 2.2.2示例中相同的SQL,但它没有将vendors.name列引入存储结果,我不知道为什么。在数据库控制台中运行时生成的SQL确实有效,因此问题肯定与Rails有关 B2bPrivilege.select("b2b_privileges.*, vendors.name AS vendor_name").joins('LEFT JOIN
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的调试信息
做
事实证明,连接的内容就在那里,它只是不输出到控制台,而只是主关系。如果您在控制台窗口中查看输出,我认为控制台输出只反映/检查返回的根级别对象
当我调试使用联接的查询时,这对我来说是一个难题,谢谢。我尝试了您的变体,它返回了相同的结果-仍然缺少联接表中的列Orry,我错过了引号。我测试了它是否使用引号,它工作正常。显示表格结构。再次感谢。看起来您在示例中使用了关联-:B2B特权我的模型不使用关联。事实证明,连接的内容就在那里,它只是不向控制台报告,而只是主关系报告。如果您在控制台窗口中查看输出,我认为控制台输出只反映/检查返回的根级别对象。
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)
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>
]
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