私はレールによって生成されたデフォルトのコントローラはif
create
内の文とupdate
ではなくdestroy
Railsコントローラが、破棄が成功したかどうかを確認するif文を持っていないのはなぜですか?
def update
@product = Product.find(params[:id])
respond_to do |format|
if @product.update_attributes(params[:product])
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
ではありませんインクルードを破壊する場合、文はここ
def destroy
@product = Product.find(params[:id])
@product.destroy
respond_to do |format|
format.html { redirect_to products_url }
format.json { head :no_content }
end
end
失敗の残りの部分である場合があることに気づきましたスキャフォールドコントローラ。
class ProductsController < ApplicationController
# GET /products
# GET /products.json
def index
@products = Product.all
respond_to do |format|
format.html # index.html.erb
format.json { render json: @products }
end
end
# GET /products/1
# GET /products/1.json
def show
@product = Product.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.json { render json: @product }
end
end
# GET /products/new
# GET /products/new.json
def new
@product = Product.new
respond_to do |format|
format.html # new.html.erb
format.json { render json: @product }
end
end
# GET /products/1/edit
def edit
@product = Product.find(params[:id])
end
# POST /products
# POST /products.json
def create
@product = Product.new(params[:product])
respond_to do |format|
if @product.save
format.html { redirect_to @product, notice: 'Product was successfully created.' }
format.json { render json: @product, status: :created, location: @product }
else
format.html { render action: "new" }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# PUT /products/1
# PUT /products/1.json
def update
@product = Product.find(params[:id])
respond_to do |format|
if @product.update_attributes(params[:product])
format.html { redirect_to @product, notice: 'Product was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @product.errors, status: :unprocessable_entity }
end
end
end
# DELETE /products/1
# DELETE /products/1.json
def destroy
@product = Product.find(params[:id])
@product.destroy
respond_to do |format|
format.html { redirect_to products_url }
format.json { head :no_content }
end
end
end
Railsコントローラは、デフォルトでdestroyメソッドのIF文を持っていないのはなぜですか?
データベース内に外部キーの検証が残っているか、またはモデルの 'before_destroy'が削除操作を停止している可能性があります。 – Iceman
あなたが正しいですが、レコードの削除中にすべてがあるかもしれませんが、足場はデフォルトのテンプレートです。 – Fercell
@Icemanはい、それは正しいですが、私は足場がそのような状況を説明しているとは思わないのです。足場は単なるCRUDに関係しているだけであり、もっと重要なことがあればそれを変更するためにコーダーに依存しています。 – Yaniv