使用表单创建新项目时,我遇到了嵌套对象问题。当我在表单和视图中创建一个新项目时,我在尝试访问它时在Product对象上得到一个nil。 这是我的结构。我有一个名为Item的类和一个名为Product的类。可能有多个项目涉及同一产品。
class CreateItem < ActiveRecord::Migration
def change
create_table :items do |t|
t.integer :product_id
t.string :name
t.text :description
t.timestamps
end
end
end
class CreateProducts < ActiveRecord::Migration
def change
create_table :products do |t|
t.string :name
t.text :description
t.decimal :price
t.string :image_file_name
t.integer :inventory
t.timestamps
end
end
end
class Item< ActiveRecord::Base
belongs_to :product
belongs_to :itemstatus
end
class Product < ActiveRecord::Base
has_one :shop
accepts_nested_attributes_for :item
end
控制器代码:
def create
@item= Item.new(params[:item])
if @item.save
redirect_to @item, notice: "Item successfully created!"
else
render :new
end
end
当我去展示创建的项目时,问题就出现了。 Product对象为零。我不确定在创建新项目的过程中如何正确创建和添加产品对象应该做些什么。
有人能帮助我吗? 谢谢!
答案 0 :(得分:0)
params[:item]
必须如下所示:
#first example
params[:item] = {product_id: 1}
#second example
product = product.create(name: "", description: "", ..)
params[:item] = {product: product}
#third example
@item.product = product
#or
@item.product_id = params[:item][:product_id]
尝试这样做:
@item.new(name: params[:item][:name], product_id: params[:item][:product_id], description: params[:item][:description])