クリックするとリソースが削除されるようにするアクションメーラーのリンクを生成するのに少し問題があります。ここでdeleteメソッドのための私のコードは、(アプリの内部に正常に動作する)です:ここではアクションメーラーのモデルリソースリンクを削除するビュー
def destroy
@registrant = Registrant.find(params[:id])
@registrant.destroy
flash[:danger] = "Your registration has successfully been cancelled."
redirect_to root_url
RegistrantMailer.cancellation_email(@registrant, @registrant.event).deliver_now
rescue
flash[:warning] = "No registration record found."
redirect_to root_url
end
は、アプリケーションのルートです:
Prefix Verb URI Pattern Controller#Action
registrants POST /registrants(.:format) registrants#create
registrant GET /registrants/:id(.:format) registrants#show
DELETE /registrants/:id(.:format) registrants#destroy
static_pages_contact GET /static_pages/contact(.:format) static_pages#contact
static_pages_about GET /static_pages/about(.:format) static_pages#about
events GET /events(.:format) events#index
POST /events(.:format) events#create
new_event GET /events/new(.:format) events#new
edit_event GET /events/:id/edit(.:format) events#edit
event GET /events/:id(.:format) events#show
PATCH /events/:id(.:format) events#update
PUT /events/:id(.:format) events#update
DELETE /events/:id(.:format) events#destroy
root GET / static_pages#home
そして、ここでは、中にIメーラーからのリンクあり削除リンクを生成します:Railsのビュー内からPUTとDELETEステートメントを発行する能力が原因余分な作業のレールにある
<p>Can't make the event? Click here to cancel your registration: <%= link_to 'Destroy', @registrant, method: :delete %> </p>
生成された電子メール内のHTMLリンクを検査します。リンクをたどって、コントローラの動作がヒットしていることを確認してください。あなたがそれを得るなら、問題をあなたのコントローラーアクションに絞り込んだのです。ところで、あなたが示したコードにはアクセスコントロールがありません。つまり誰でも誰でも削除できます。 –
投稿する前に調べましたが、ブラウザが常にGETリクエストを送信し、削除アクションがDELETEを使用するため、正しいコントローラとアクションに当たっている間にエラーが発生しました。アクセスコントロールを指摘してくれてありがとう、私は実際にコントローラにいくつかのメソッドがあり、電子メールリンクを認証するためのトークンを追加しています。 – Jarrel09
正しいコントローラアクションに当たっていたら、どのようにHTTPメソッドを変更することで解決できますか?すべてのHTTPメソッドはコントローラアクションへのルートです。とにかく嬉しく思ったのです –