Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 3 将SQL重写为ActiveRecord_Ruby On Rails 3_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 3 将SQL重写为ActiveRecord

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

我正试图重写旧的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  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