表单创建嵌套对象

时间:2014-01-03 00:19:11

标签: ruby-on-rails activerecord

使用表单创建新项目时,我遇到了嵌套对象问题。当我在表单和视图中创建一个新项目时,我在尝试访问它时在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对象为零。我不确定在创建新项目的过程中如何正确创建和添加产品对象应该做些什么。

有人能帮助我吗? 谢谢!

1 个答案:

答案 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])

help link