以下の @line_item.id としてインスタンス変数 ID にアクセスしようとすると、エラーが発生します (値をログに記録すると nil)。しかし [:id] は問題なく動作します。
@cart = current_cart
@line_item = @cart.line_items.find_by_id(params[:id])
@line_item = @line_item.decrement_quantity(@line_item[:id])
以下の @line_item.id としてインスタンス変数 ID にアクセスしようとすると、エラーが発生します (値をログに記録すると nil)。しかし [:id] は問題なく動作します。
@cart = current_cart
@line_item = @cart.line_items.find_by_id(params[:id])
@line_item = @line_item.decrement_quantity(@line_item[:id])
@Kyle が言ったように、 @line_item.id と @line_item[:id] は同じ値を返す必要があります。
もう1つ、オブジェクトのインスタンスメソッドを呼び出しているため、メソッドのパラメーターとして@line_item
必要ありません
。メソッド内に直接@line_item.id
アクセスできますself.id
次のように書くことをお勧めします-
@cart = current_cart
@line_item = @cart.line_items.find_by_id(params[:id])
@line_item.decrement_quantity
## inside model
class LineItem <
def decrement_quantity
puts self.id # will print the id of object calling method
end
end