Ruby on rails 未定义的方法`item';表单提交时使用rails

Ruby on rails 未定义的方法`item';表单提交时使用rails,ruby-on-rails,forms,registration,shopping-cart,Ruby On Rails,Forms,Registration,Shopping Cart,我正在用以下型号制作购物车: 用户: class User < ActiveRecord::Base has_secure_password has_one :cart end class Cart < ActiveRecord::Base belongs_to :user has_many :items validates :item, uniqueness: true end class Item < ActiveRecord::Base be

我正在用以下型号制作购物车:

用户:

class User < ActiveRecord::Base
  has_secure_password

  has_one :cart
end
class Cart < ActiveRecord::Base
  belongs_to :user
  has_many :items
  validates :item, uniqueness: true
end
class Item < ActiveRecord::Base
  belongs_to :product
  belongs_to :cart
end
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        @user.create_cart
        format.html { redirect_to @user, notice: 'User was successfully created.' }
        format.json { render action: 'show', status: :created, location: @user }
      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
因此,它应该在创建帐户时为每个
用户创建一个新的
购物车
。但是,当我创建一个新用户时,会出现以下错误:

undefined method `item' for #<Cart id: nil, user_id: 1, created_at: nil, updated_at: nil>

Extracted source (around line #31):
29 respond_to do |format|
30   if @user.save
31     @user.create_cart
32     format.html { redirect_to @user, notice: 'User was successfully created.' }
33     format.json { render action: 'show', status: :created, location: @user }
34   else
的未定义方法“item”#
提取的源(第31行附近):
29回应待办事项|格式|
30如果@user.save
31@user.create\u购物车
32 format.html{将_重定向到@user,注意:“用户已成功创建”。}
33 format.json{呈现操作:“显示”,状态::已创建,位置:@user}
34其他

这是为什么?我该怎么做才能使它工作?

您的
购物车
模型包括
验证:item
,这意味着/要求它在
购物车
表中有一个
item
列。我想情况并非如此。

是的,这确实是原因。但是,如果没有该行,
购物车
只能容纳1个唯一的
项目
,我如何验证这一点?您能澄清一下“容纳1个唯一的
项目
”的含义吗?您已经声明每个购物车都有许多物品。我的意思是,每个购物车可以有许多不能重叠的物品(即,一个人不能添加超过1个计数为
x
)的“新鲜烘焙甜甜圈”),如果他想对它们做任何事情(更改计数/从购物车中删除),那么他必须编辑该物品,但同一购物车中不能有同一商品的两个实例。然后,您要向
商品
添加唯一性验证,范围为
购物车id
。有关更多信息,请参阅。