Rails を使用したアジャイル Web 開発の本を読んでいるときに簡単な質問がありましたが、Web サイトを調べても答えを見つけることができませんでした。私には2つの方法があります:
このメソッドは私のコントローラーにあります:
def decrement
@line_item = LineItem.find(params[:id])
@line_item = @line_item.decrement_quantity(@line_item.id)
respond_to do |format|
if @line_item.save
format.html { redirect_to store_url }
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
そして、これは対応するモデルにあります:
def decrement_quantity(line_item_id)
current_item = LineItem.find_by_id(line_item_id)
if current_item.quantity > 1
current_item.quantity -= 1
else
current_item.destroy
end
current_item
end
これが最も効率的なコードではないことはわかっていますが、私の質問は、 current_item がモデル メソッドで破棄された場合、そのメソッドは何を返すのでしょうか? (nil?) 変数としての current_item はまだ存在していますか? データベース オブジェクトが破棄されただけですか? コントローラの decrement メソッドは、破棄されたオブジェクトをどのように保存できますか? (コントローラーメソッドの if ステートメントに logger.debut ステートメントを入れましたが、モデルメソッドが if または else ステートメントを評価したかどうかに関係なく、コードは常にそこを通過するようです)。