나는 온전한 체크로서 간단한 예제를 만들었고 레일에서 has_and_belongs_to_many 관계의 어느 한 쪽에서 아이템을 파괴하는 것처럼 보이지는 않는다.오류없이 삭제/삭제하는 레일 habtm을 만드는 방법은 무엇입니까?
어느 테이블에서든지 개체를 삭제하려고 할 때마다 두려운 NameError/"초기화되지 않은 상수"오류 메시지가 나타납니다.
설명하기 위해 Boy 클래스와 Dog 클래스가있는 샘플 레일즈 앱을 만들었습니다. 나는 각각을 위해 기본적인 비계를 사용하고 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
안녕 Bradley- 도움이 되서 기쁩니다. 그리고 모델 저장은 실제로 모든 빌드 된 연관을 저장하는 것입니다. 이것은 이전에 모르는 것입니다. 본 사이트를 처음 보신 분이 있습니다. 그것은 당신이 나의 대답을 받아들이면 당신의 문제를 해결 한 것이기 때문에 저를 도와줍니다. 그렇게하면, 나는 그것을 얻는다. 감사합니다. 자이 메 –