class ArticlesController < ApplicationController
http_basic_authenticate_with name: "deba", password: "12345", except: [:index, :show]
def index
@articles = Article.all
end
def show
@article = Article.find(params[:id])
end
def new
@article = Article.new
end
def edit
@article = Article.find(params[:id])
end
def create
@article = Article.new(article_params)
@article.save
redirect_to @article
end
def update
@article = Article.find(params[:id])
if @article.update(article_params)
redirect_to @article
else
render 'edit'
end
end
def delete
@article = Article.find(params[:id])
@article.delete
redirect_to articles_path
end
private
def article_params
params.require(:article).permit(:title, :text)
end
end
我試圖這樣做,但它并沒有洗掉該專案。如果我將洗掉更改為銷毀它作業正常但我必須更改默認方法名稱
uj5u.com熱心網友回復:
不確定您指向的是哪個默認方法名稱,但控制器操作的默認名稱是destroy而不是delete。如果您希望更改操作的名稱,您可以添加一個新路由,將用戶帶到洗掉操作并使用它而不是默認的銷毀操作。
在操作中,您嘗試執行的操作@article.delete是有效的,但建議始終使用destroy,因為該delete方法將只運行 SQL DELETE 陳述句并且不運行回呼。destroy將始終運行回呼。
更多資訊在這里:
銷毀和洗掉的區別
為什么 Ruby on Rails 動作“destroy”不命名為“delete”?
uj5u.com熱心網友回復:
如果您真的想路由DELETE /articles/:id到控制器中的洗掉方法,您可以通過自定義路由來實作:
Rails.application.routes.draw do
resources :articles, except: :destroy do
delete '/', on: :member, action: :delete # but why?
end
end
您也可以只為該方法設定別名,而不是修改您的路線:
class ArticlesController < ApplicationController
# ...
def delete
@article = Article.find(params[:id])
@article.delete # you should be using destroy
redirect_to articles_path
end
alias delete destroy
# ...
end
然而,這是完全沒有意義的。遵循約定,把時間花在提高生產力和撰寫可維護的代碼上。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/471111.html
