Выдача внешнего ключа Rails - PullRequest
       3

Выдача внешнего ключа Rails

0 голосов
/ 17 сентября 2010

Извините, если этот вопрос кажется простым, я очень плохо знаком с Rails (только начал изучать несколько дней назад), но после консультации с Google и "Agile Web Development с Rails" я не могу найти ответ.

У меня проблема с Rails 2.3.8, создающим внешний ключ на двух моделях.Мои таблицы выглядят так:

cars                                 manufacturer
----                                 ------------
car_make                             name
car_model                            country
car_class                            logo_url
image_url                            (and default 'id' created by Rails)
manufacturer_id
(and default 'id' created by Rails)

Мои поля 'car_make' и 'name' по сути одинаковы;каждый автомобиль, который я создаю, я хочу иметь возможность ассоциировать его с существующим производителем.Это колонка, в которой я пытаюсь создать ФК.

У моего car.rb есть «own_to: производитель», а у моего factoryr.rb есть «has_many: cars», чтобы установить связь одного производителя со многими автомобилями.Тем не менее, когда я создаю новый автомобиль (через строительные леса), поле factory_id остается пустым.

Я зашел в свой cars_controller, нашел используемый метод 'create' и попытался добавить вторую строку ниже:

@car = Car.new(params[:car])
@car.manufacturer_id = car.manufacturer.id  # <===

Это вызывает 'NameError в CarsController # create'ошибка, и я вижу:

undefined local variable or method 'car' for #<CarsController:0x1034642f0>

Rails, похоже, не нравится строка, которую я добавил.Чего мне не хватает, чтобы заставить это работать?

Ответы [ 2 ]

0 голосов
/ 18 сентября 2010

По вашему мнению, вы хотите создать выпадающий список для производителей (я бы предположил), поэтому вы должны сделать что-то вроде этого в виде:

<%= collection_select(:car, :manufacturer_id, Manufacturer.all, :id, :name) %>

Тогда ваше действие createне нужно явно устанавливать manufacturer_id, потому что он должен был получить это из формы.

0 голосов
/ 18 сентября 2010

Что ж, вам нужно иметь доступного производителя, прежде чем вы сможете подключить его к автомобилю.

@car = Car.new( params[:car] )
m = Manufacturer.first # => as you can see you must already have one made
@car.manufacturer = m
@car.save

Причина, по которой car не определена, заключается в том, что вы не определили ее. Какого производителя автомобиля вы хотите присвоить @car?

Так что в основном вам нужно сделать производителя, прежде чем делать машину. Если в форме, которую вы заполняете, содержатся данные для производителя, убедитесь, что в параметрах указали их под другим ключом, например, скажем, params[:manufacturer], и сделайте то же самое, что и с автомобилем. Может быть, как:

@car = Car.new( params[:car] )
@manufacturer = Manufacturer.find_or_create_by_name_and_country( params[:manufacturer][:name], params[:manufacturer][:country] )
@car.manufacturer = @manufacturer
@car.save
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...