我們最近將我們的rails應用程序從版本3.0.3升級到3.1.0。應用程序在大部分情況下都能成功運行,就像之前的一個主要異常一樣。我們在兩個模型(SurveyDatum和SubGroup)之間建立了多對多的關係,並通過名爲SubGroupSurveyDatum的模型進行連接。下面是每個代碼:has_many:通過使用NULL的sql語句編號
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
將「爲空」的部分顯然是在我的調查數據對象的ID應該去,然而活動記錄無法使用它。該對象確實有一個id,因爲如前所述,它是從數據庫中持久保存和檢索的。這個問題在我們轉向rails 3.1之後纔出現,所以我認爲我沒有按照新版本做適當的事情,但我不知道。有任何想法嗎?預先感謝您的幫助!
我們使用的是MySql 5.5,雖然我沒有看到它和sqlite之間存在足夠大的差異,導致這類問題。不過,好的建議,謝謝,關於寶石。總是一個好主意來看待這些。該項目對外部依賴性非常輕,我們正在使用的唯一一個與數據庫相關的任何東西都是Devise進行身份驗證。搜索繼續! –