私は Rails 3 に移行中です。最終的にテストと開発ですべてが機能するようになったと思いますが、現在は本番環境 (実際にはステージング中、Rails が存在するとは信じていない環境) で、特定のクエリが機能しません。:joins が無視されるようになりました。
class Organisation
# Maybe this is relevant, because it has :dongle in it too.
LICENCE_TABLE_INCLUDES = [:organisation, :user, :owner_organisation, :profile, :dongle,
{:nested_licences => [:profile]} ]
has_many :dongles
def latest_received_licences_for_each_dongle
Licence.find(:all,
:joins => [:dongle],
:include => LICENCE_TABLE_INCLUDES,
:conditions => { 'dongles.organisation_id' => id },
# :group => 'dongles.id', # broken
:order => 'dongles.name ASC, licences.created_at DESC').
group_by {|l| l.dongle.name}.
sort_by {|d,ls| d}.
map {|d,ls| ls[0]}
# Tried to modernise it a little - same results.
#Licence.
# joins(:dongle).
# includes(LICENCE_TABLE_INCLUDES).
# where(:dongles => { :organisation_id => id }).
# order('dongles.name ASC, licences.created_at DESC').
# group_by {|l| l.dongle.name}.
# sort_by {|d,ls| d}.
# map {|d,ls| ls[0]}
end
end
class Dongle
has_many :licences
belongs_to :organisation
end
class Licence
belongs_to :dongle
end
これを呼び出すと、エラーが発生します。
Mysql2::Error: Unknown column 'dongles.organisation_id' in 'where clause': SELECT `licences`.* FROM `licences` WHERE `licences`.`parent_licence_id` IS NULL AND ((`dongles`.organisation_id = 143)) AND (`licences`.parent_licence_id IN (22,23))
mysql2 (0.2.18) lib/active_record/connection_adapters/mysql2_adapter.rb:265:in `query'
ご覧のとおり、クエリに結合が追加されていません。(Rails 3.0.17、mysql2 0.2.18 - Rails 3.0 を最初に動作させようとしているため、まだ Rails 3.2 に更新していません。)