我創建了一個簡單的例子作爲完整性檢查,並且仍然無法破壞rails中has_and_belongs_to_many關係兩側的項目。如何創建一個刪除/銷燬沒有錯誤的rails habtm?
無論何時我嘗試從任一表中刪除一個對象,我都會遇到可怕的NameError /「uninitialized constant」錯誤消息。
爲了演示,我創建了一個帶有Boy類和Dog類的示例rails應用程序。我爲每個腳本使用了基本腳手架,並創建了一個名爲boys_dogs的鏈接表。然後,我添加了一個簡單的before_save例程,在任何時候創建一個男孩並建立關係時創建一個新的「狗」,以便輕鬆設置事物。
dog.rb
class Dog < ActiveRecord::Base
has_and_belongs_to_many :Boys
end
boy.rb
class Boy < ActiveRecord::Base
has_and_belongs_to_many :Dogs
def before_save
self.Dogs.build(:name => "Rover")
end
end
schema.rb
ActiveRecord::Schema.define(:version => 20100118034401) do
create_table "boys", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "boys_dogs", :id => false, :force => true do |t|
t.integer "boy_id"
t.integer "dog_id"
t.datetime "created_at"
t.datetime "updated_at"
end
create_table "dogs", :force => true do |t|
t.string "name"
t.datetime "created_at"
t.datetime "updated_at"
end
end
我見過很多在這裏和其他地方的有關類似問題的帖子,但解決方案通常使用belongs_to和複數/單數類名稱混淆。我不認爲在這種情況下,但我嘗試切換habtm聲明以使用單數名稱來查看是否有幫助(沒有運氣)。我似乎在這裏錯過了一些簡單的東西。
實際的錯誤信息是:在BoysController#
NameError破壞
未初始化的常量男孩::狗
跟蹤的樣子:
/庫/紅寶石/Gems/1.8/gems/activesupport-2.3.4/lib/active_support/dependencies.rb:105:in
const_missing'
destroy_without_callbacks'
(eval):3:in
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/callbacks.rb:337:indestroy_without_transactions'
發送」
/Library/Ruby/Gems/1.8/gems/activerecord-2.3.4/lib/active_record/transactions.rb:229:in
...
感謝。
太棒了。謝謝。更改爲小寫做了訣竅。注意:除非男孩對象已經保存,否則使用self.dogs.create將不起作用。但我可以將其移至after_save。 self.dogs.build命令似乎按原樣工作。再次感謝。 – Bradley 2010-01-18 18:49:00
嗨布拉德利 - 很高興幫助。我敢打賭,模型保存實際上是保存了所有建立的關聯,這是我以前不知道的。 我注意到你是新來的網站。如果你接受我的回答,它會幫助我,因爲它是解決你問題的方法。那樣,我得到它的信任。 謝謝, Jaime – 2010-01-18 23:46:45