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
。有关更多信息,请参阅。