У меня есть следующие модели:
class Product < ActiveRecord::Base
belongs_to :brand
belongs_to :model
accepts_nested_attributes_for :brand, :model
...
end
class Brand < ActiveRecord::Base
has_many :products
has_many :models
...
end
class Model < ActiveRecord::Base
has_many :products
belongs_to :brand
accepts_nested_attributes_for :brand
...
end
У меня проблема с созданием нового продукта.
Вот соответствующий код в контроллере:
class ProductsController < ApplicationController
...
def create
@product = Product.new(params[:product])
if @product.save ... # Here is the error
end
...
end
Когда пользователь добавляет новый бренд и новую модель, params[:product]
содержит следующее:
"brand_attributes"=>{"name"=>"my_new_brand"}
"model_attributes"=>{"model_no"=>"my_new_model"}
и я получил следующую ошибку:
Mysql2::Error: Column 'brand_id' cannot be null: INSERT INTO `models` ...
потому что модель имеет внешний ключ brand_id
, который не установлен. Я не могу установить его, потому что бренд (как и модель) создается на лету, когда создается продукт. Я не хочу создавать бренд перед продуктом, потому что тогда, когда у продукта есть ошибки, мне нужно будет удалить созданный бренд.
Затем я попытался изменить params[:product]
так:
"brand_attributes"=>{"name"=>"my_new_brand",
"model_attributes"=>{"model_no"=>"my_new_model"}}
но я получаю следующее:
unknown attribute: model_attributes
Каков был бы правильный способ справиться с этим?