레일 3.1.3과 루비 1.9.2를 사용하고 있으며 데이터베이스에 시드 데이터를 생성 할 때 버그가있는 것 같습니다. 간단한 와인 수집 앱을 만들고 있는데, 단지 두 개의 간단한 인스턴스 (name
이 "빨간색"또는 "흰색"인)가있는 Grape
클래스가 있습니다. 나는 belongs_to
Grape
클래스 인 Varietal
클래스를 가지고 있으며 간단한 name
필드 만 가지고 있습니다. 나는 데이터베이스의 데이터에 모습을 갈 때 , 이상하게ID 대신 Rails 3.1에서 객체를 사용하여 호출하기
# 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
. 레일즈 콘솔을 사용하여, id
필드를 인스턴스 Grape
인스턴스가 아닌 인스턴스로 전달하면 올바른 동작을 얻는다는 것을 알았습니다.
내가 누락 된 항목이 있습니까? Rails에서 원시 ID 대신 항상 ActiveRecord 객체를 전달할 수 있다고 생각하여 id
필드 값을 자동으로 조회했습니다.
동적 검색기 by_grape_id를 명시 적으로 사용하면 ID를 전달할 것으로 예상됩니다. – Johny
그게 사실이라면, 왜 흰 포도 인스턴스와 find_by_grape_id 잘 작동합니까? 또한 find_or_create에 대해 실행 된 SQL이 먼저 흰색 포도씨 ID의 올바른 SELECT를 수행하지만 Varietal을 만들려면 INSERT에 잘못된 ID가 있음을 확인했습니다. 아직도 저에게 버그처럼 보입니다. –