Я думаю, что в вашем коде есть опечатка. Я создал приложение, которое вы описали в своем вопросе, и попробовал несколько простых запросов. Затем я попробовал ваш пример запроса в первой строке в выводе ниже.
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).include(:booking=>:client).order('client.name')
К этому:
SubBooking.joins(:booking).includes(:booking=>:client).order('client.name')
устраняет ошибку.
Если вы хотите увидеть код, который я использовал, на GitHub здесь . Дайте мне знать, если у вас есть еще вопросы.
С уважением,
Девин М