0

ユーザーがアイテムの数量を更新した場合、カートを保存して (リダイレクトできるように)、その品目を破棄します。また、数量を増やす場合は、その商品の在庫も十分にあることを確認したいです。したがって、私の更新関数は次のようになります (応答関数が機能しているように見えることを信頼してください。コードが約半分にカットされているため、見やすくなっています)。

  def update
    @line_item = LineItem.find(params[:id])
    @line_item_new_qty = params[:item][:qty]
    unless LineItem.get_inventory_check?( @line_item.id , params[:item][:qty] )
      respond 'Insufficient Inventory'
    else
      if @line_item_new_qty == 0
        @line_item_cart = @line_item.cart
        @line_item.destroy
          respond 'Item Deleted'
      else    
        respond 'Quantity Updated'
      end
    end
  end

get_inventory_check は機能しているようです。十分にあれば、line_item の数量を変更して保存し、true を返します。それ以外の場合は、厳密に false を返します。

if == 0 ステートメントを可能な限りすべての場所に配置しようとしましたが、@ line_item.qty == 0 がある場合に作業を開始できるのは、最初に 0 に更新してから削除することだけです。更新しようとすると、削除されます。これは、get_inventory_check メソッドで line_item が更新されたことがわからないことを意味すると思いますが、if ステートメントで params を使用しても機能しません。

4

1 に答える 1

4

params[:item][:qty]である可能性が高いStringため、@line_item_new_qty == 0が返されfalseます。@line_item_new_qtyこれを潜在的に修正する 1 つの方法は、整数に変換することです。

if @line_item_new_qty.to_i == 0

または、単に と比較することもできます"0"が、一般的に、問題は異なる型を比較す​​ることにある可能性があります。

于 2013-01-28T23:55:05.030 に答える