【问题标题】:undefined method `item' with rails on form submit表单提交上带有导轨的未定义方法“项目”
【发布时间】:2013-12-11 17:15:44
【问题描述】:

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

用户:

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

所以它应该在创建帐户时为每个user 创建一个新的cart。但是,当我创建一个新用户时,我确实会收到此错误:

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

为什么会这样?我该怎么做才能让它发挥作用?

【问题讨论】:

    标签: ruby-on-rails forms registration shopping-cart


    【解决方案1】:

    您的Cart 模型包括validates :item,这意味着/要求它在carts 表中有一个item 列。我怀疑情况并非如此。

    【讨论】:

    • 是的,确实是这个原因。但是我如何验证 cart 在没有该行的情况下只能保存 1 个唯一的 item
    • 你能解释一下“保持 1 个唯一的item”是什么意思吗?您已声明每个购物车都有_many 项。
    • 我的意思是每个购物车可以有许多不能重叠的项目(即一个人不能添加超过 1 个“新鲜出炉的甜甜圈”,计数为 x),如果他想对他们做任何事情(更改计数/从购物车中删除),然后他必须编辑该项目,但同一购物车中不能有同一项目的两个实例。
    • 那么你想给Item添加一个唯一性验证,范围为cart_id。请参阅edgeguides.rubyonrails.org/… 了解更多信息。
    猜你喜欢
    • 2012-11-12
    • 1970-01-01
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多