0

私は 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 に更新していません。)

4

0 に答える 0