我正在使用Rails 3.1.3和Ruby 1.9.2,並且在我的數據庫中創建種子數據時遇到了類似bug的問題。我正在創建一個簡單的葡萄酒收集應用程序,並且我有一個Grape
類,只有兩個簡單實例(name
是「紅色」或「白色」)。我有一個Varietal
類,其中belongs_to
Grape
類,也只有一個簡單的name
字段。在Rails 3.1中使用對象代替ID創建調用
當我去創造一些種子數據,我使用如下代碼:
# create some reds
r = Grape.find_or_create_by_name('Red')
Varietal.find_or_create_by_name_and_grape_id('Cabernet Franc', r)
Varietal.find_or_create_by_name_and_grape_id('Cabernet Sauvignon', r)
Varietal.find_or_create_by_name_and_grape_id('Malbec', r)
# create some whites
w = Grape.find_or_create_by_name('White')
Varietal.find_or_create_by_name_and_grape_id('Chardonnay', w)
Varietal.find_or_create_by_name_and_grape_id('Riesling', w)
Varietal.find_or_create_by_name_and_grape_id('Sauvignon Blanc', w)
奇怪的是,當我在數據庫中的數據去看看,的Varietals
的所有與相關的「紅色」Grape
。使用Rails控制檯,我發現如果通過發現的Grape
實例而不是實例本身的id
字段,我會得到正確的行爲。
我錯過了什麼嗎?我認爲在Rails中,您始終可以傳遞ActiveRecord對象來代替原始ID,並且它會自動查找id
字段值。
我想如果你明確使用動態查找器by_grape_id,那麼它期望你通過ID。 – Johny 2012-01-03 23:08:29
如果這是真的,那麼爲什麼帶有白色葡萄實例的find_by_grape_id工作得很好?另外,我注意到爲find_or_create執行的SQL首先使用白色Grape實例的ID執行正確的SELECT,但是創建Varietal的INSERT具有錯誤的ID。對我來說似乎仍然是一個錯誤。 – 2012-01-04 17:51:05