Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/67.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
Mysql 当要包含的模型与基础模型没有直接关联时,如何调用include(left join)?_Mysql_Ruby On Rails_Activerecord_Left Join - Fatal编程技术网

Mysql 当要包含的模型与基础模型没有直接关联时,如何调用include(left join)?

Mysql 当要包含的模型与基础模型没有直接关联时,如何调用include(left join)?,mysql,ruby-on-rails,activerecord,left-join,Mysql,Ruby On Rails,Activerecord,Left Join,有三种模式,我想加入,预订,预订和客户。一个预订有很多次预订,而且一个预订也可能不是客户。我想列出由client.name订购的所有sub_预订。我需要一个关于预订和分账的加入,以及预订和客户之间的包含关系。我尝试了以下方法,但没有效果 SubBooking.joins(:booking).includes(:booking=>:client).order('client.name') 模型如下 class Booking < ActiveRecord::Base belong

有三种模式,我想加入,预订,预订和客户。一个预订有很多次预订,而且一个预订也可能不是客户。我想列出由client.name订购的所有sub_预订。我需要一个关于预订和分账的加入,以及预订和客户之间的包含关系。我尝试了以下方法,但没有效果

SubBooking.joins(:booking).includes(:booking=>:client).order('client.name')
模型如下

class Booking < ActiveRecord::Base
  belongs_to :client
  has_many :sub_bookings
  ...
end

class SubBooking < ActiveRecord::Base
  belongs_to :booking
  ...
end

class Client < ActiveRecord::Base
  has_many :bookings
  ...
end

我想你的代码有错。我已经创建了您在问题中描述的应用程序,并尝试了一些简单的查询。接下来,我尝试了下面输出中第1行的示例查询

Loading development environment (Rails 3.1.3)
ruby-1.9.2-p290 :001 > SubBooking.joins(:booking).include(:booking=>:client).order('client.name').to_sql
NoMethodError:   SubBooking Load (0.1ms)  SELECT "sub_bookings".* FROM "sub_bookings" INNER JOIN "bookings" ON "bookings"."id" = "sub_bookings"."booking_id"
undefined method `include' for []:ActiveRecord::Relation
        from /home/devin/.rvm/gems/ruby-1.9.2-p290/gems/activerecord-3.1.3/lib/active_record/relation.rb:459:in `method_missing'
        from (irb):1
        from /home/devin/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:45:in `start'
        from /home/devin/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands/console.rb:8:in `start'
        from /home/devin/.rvm/gems/ruby-1.9.2-p290/gems/railties-3.1.3/lib/rails/commands.rb:40:in `<top (required)>'
        from script/rails:6:in `require'
        from script/rails:6:in `<main>'
ruby-1.9.2-p290 :002 > SubBooking.joins(:booking).includes(:booking=>:client).order('client.name').to_sql
 => "SELECT \"sub_bookings\".* FROM \"sub_bookings\" INNER JOIN \"bookings\" ON \"bookings\".\"id\" = \"sub_bookings\".\"booking_id\" ORDER BY client.name"
ruby-1.9.2-p290 :003 >
为此:

SubBooking.joins(:booking).includes(:booking=>:client).order('client.name')
解决错误

如果你想看看我在上面使用的代码。如果你还有任何问题,请告诉我

问候,,
Devin M

你说它不起作用是什么意思?它给你一个错误消息了吗?是的,有一个很长的错误消息。我没有访问权限,我一回到我的机器就会发布。看看我的答案,我想我发现了一些与你的问题很接近的东西。对不起,输入错误,谢谢你把它放在沙盒上没有问题,希望这就是你面临的问题。当你回到你的机器上时,让我知道这是否对你有效。很抱歉我根据记忆写了这篇文章,没有复制粘贴确切的代码,谢谢你把它放在沙箱上,但我肯定我从未见过这种错误未定义的方法'include'I used'includes'。你用“包含”测试过吗。顺便说一句,我使用的是Ruby 1.8.7,它有什么区别吗?是的,请看第二行,当使用includes时,它工作得很好。我不知道缺少左连接是否是因为没有执行连接的数据,或者代码有问题。这很奇怪,我很惊讶,但它现在可以工作了,昨晚控制台上的同一行没有工作。SubBooking Load 34.3ms选择sub_bookings.id`AS t0_r0。。。从sub_bookings内部加入bookings ON bookings.id=sub_bookings.booking_id离开外部加入客户端。id=bookings.client_id其中sub_bookings.created_at>='2011-09-25'和sub_bookings.created_at<'2011-11-25'按sub_bookings.property_name asc,clients.name排序`
SubBooking.joins(:booking).include(:booking=>:client).order('client.name') 
SubBooking.joins(:booking).includes(:booking=>:client).order('client.name')