2

だから、私はレール(およびルビー)にかなり慣れていないので、ここですべてがうまくいかないところを理解しようとしています. 私はウェブショップでカートに取り組んでいます。ユーザーは、カートのアイテム (この場合は line_item.rb) が保存されているセッションを取得します。

問題: 商品をクリックすると、カート メソッド add_product を介してカートに追加されます。同じアイテムを 2 回追加する代わりに、同じアイテムをもう一度クリックすると、そのアイテムの数量プロパティに ++1 が加算されます。しかし、2回目にクリックすると、次のエラーページが表示されます。

LineItemsController#create の NoMethodError

undefined method `+' for nil:NilClass

ここに私のcart.rbがあります:

class Cart < ActiveRecord::Base
  has_many :line_items, dependent: :destroy

  def add_product(product_id)
    current_item = line_items.find_by_product_id(product_id)
    if current_item
      current_item.quantity += 1
      Rails.logger.debug(current_item.quantity)
    else
      current_item = line_items.build(:product_id => product_id)
    end
    current_item
  end
end

line_item の数量プロパティは整数型です。それに整数を追加できるはずですよね?現時点で迷っているところです。

line_items_controller.rb の「作成」メソッドは次のとおりです。

  def create
@cart = current_cart
product = Product.find(params[:product_id])
@line_item = @cart.add_product(product.id)
@line_item.product = product

respond_to do |format|
  if @line_item.save
    format.html { redirect_to @line_item.cart,
      notice: 'Line item was successfully created.' }
    format.json { render json: @line_item,
      status: :created, location: @line_item }
  else
    format.html { render action: "new" }
    format.json { render json: @line_item.errors,
      status: :unprocessable_entity }
  end
end

終わり

何か案は?

乾杯

4

2 に答える 2

4

current_item に数量がないためだと思います。おそらくデフォルト値はありません。あなたはそれが 0 であることを期待していますが、実際にはnil.

デフォルト値を設定し、列が nil にならないようにします。before_createまた、保存する前にその値を 0 に設定するメソッドを定義することもできます(値が nil の場合)。

これを修正する別の方法は、そこに nil がないことを確認することです:

current_item.quantity = current_item.quantity.blank? ? 1 : current_item.quantity + 1
于 2013-01-13T16:20:17.170 に答える
0

これは current_item.quantity が null であることを示しています。これは整数にすることができますが、データベースには null として格納されます。この場合、デフォルトで (移行時に) 1 つの値を設定するか、初めて作成するときに数量値を 1 に設定できます。

于 2013-01-13T16:21:51.340 に答える