最近、Railsアプリをバージョン3.0.3から3.1.0にアップグレードしました。アプリケーションは、1つの大きな例外を除いて、以前と同じようにほとんどの部分で正常に実行されます。2つのモデル、SurveyDatumとSubGroupの間には多対多の関係があり、SubGroupSurveyDatumというモデルを介して結合されています。それぞれのコードは次のとおりです。
class SurveyDatum < ActiveRecord::Base
has_many :sub_group_survey_data
has_many :sub_groups, :through => :sub_group_survey_data
end
class SubGroup < ActiveRecord::Base
has_many :sub_group_survey_data
has_many :survey_data, :through => :sub_group_survey_data
end
そしてあなたが期待するかもしれないように:
class SubGroupSurveyDatum < ActiveRecord::Base
belongs_to :survey_datum
belongs_to :sub_group
end
以前にデータベースから取得したSurveyDatumオブジェクト(「sd」と呼びます)があり、sub_groupsメソッド(sd.sub_groups)を呼び出すと、これはアクティブレコードによって生成された結果のSQLクエリです。
SELECT `sub_groups`.* FROM `sub_groups` INNER JOIN `sub_group_survey_data` ON `sub_groups`.`id` = `sub_group_survey_data`.`sub_group_id` WHERE `sub_group_survey_data`.`survey_datum_id` IS NULL
「ISNULL」の部分は、明らかに私の調査データオブジェクトのIDが入るはずの場所ですが、アクティブレコードはそれを使用できません。前述のように、オブジェクトは永続化されてデータベースから取得されたため、オブジェクトには実際にIDがあります。この問題は、Rails 3.1に移行して初めて発生したため、新しいバージョンでは適切に実行されていないことがあると思いますが、わかりません。何か案は?よろしくお願いします!