Я использую Rails 3.1.3 и Ruby 1.9.2 и сталкиваюсь с ошибкой при создании начальных данных в моей базе данных.Я создаю простое приложение для сбора вин, и у меня есть класс Grape
с двумя простыми экземплярами (name
это "красный" или "белый").У меня есть класс Varietal
, который belongs_to
класс Grape
, а также имеет простое поле name
.
Когда я создаю исходные данные, я использую код, подобный следующему:
# 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, я выяснил, что если я передам поле id
из найденного экземпляра Grape
, а не сам экземпляр, я получу правильное поведение.
Я что-то упустил?Я думал, что в Rails вы всегда можете передать объект ActiveRecord вместо необработанного идентификатора, и он автоматически найдет значение поля id
.