我们最近将我们的 rails 应用程序从版本 3.0.3 升级到了 3.1.0。该应用程序在大多数情况下都像以前一样成功运行,但有一个主要例外。我们在两个模型之间存在多对多关系,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
“IS NULL”部分显然是我的调查数据对象的 id 应该去的地方,但是活动记录无法使用它。该对象确实有一个 id,因为如前所述,它是从数据库中持久化和检索的。这个问题是在我们迁移到 rails 3.1 之后才出现的,所以我认为我没有按照新版本正确完成某些事情,但我不知道。有任何想法吗?预先感谢您的帮助!