前提・実現したいこと
Railsで簡単なブログの作成をしております。
現在投稿した記事の削除機能の実装を試みております。
発生している問題・エラーメッセージ
link_toヘルパーでdestroyアクションに飛ばそうとしているのですが、
なぜかhttpメソッドが「GET」と判定されてしまい、下記エラーが発生します。
Unknown action The action 'show' could not be found for ArticlesController
該当のソースコード
[index.html.erb] <% @articles.each do |article| %> <%= article.created_at.strftime('%Y/%m/%d') %> | <%= article.title %> <br> <%= article.content %><br> <% if user_signed_in? %> <%= link_to 'edit', edit_article_path(article) %> <%= link_to 'delete', article_path(article), method: :delete %> ★ここです★ <% end %>
[routes.rb] Rails.application.routes.draw do devise_for :users, controllers: { sessions: 'users/sessions'} devise_scope :user do get '/users/sign_out' => 'devise/sessions#destroy' end root 'articles#index' resources :users resources :articles end
コンソールでルーティングの確認
article GET /articles/:id(.:format) articles#show PATCH /articles/:id(.:format) articles#update PUT /articles/:id(.:format) articles#update DELETE /articles/:id(.:format) articles#destroy
[articles_controller.rb] class ArticlesController < ApplicationController before_action :user before_action :article, only:[:index, :edit, :update, :destroy] ※下記関係するアクションのみ記入 def index if @user @articles = @user.articles.order(created_at: :desc) end def destroy @article.destroy flash[:success] = "Article deleted" redirect_to root_url end private def article @article = Article.find_by(id: params[:id]) end def articles_params params.require(:article).permit(:title, :content) end
試したこと
なぜかlink_toではなく、button_toにすると記事が削除できます。
以上から削除に関するコードの記述方法に問題はないと考えております。
httpメソッドの「delete」はjavascriptを使用して送っているということまではなんとなく理解してます。layouts/application.html.erbファイルで、head部分に下記記入してます。
[layouts/application.html.erb] <head> <title>SampleBlog</title> <%= csrf_meta_tags %> <%= csp_meta_tag %> <%= stylesheet_pack_tag 'application', media: 'all' %> <%= javascript_pack_tag 'application' %> </head>
app/javascript/packs/application.js に下記記載
[app/javascript/packs/application.js] require("@rails/ujs").start() require("@rails/activestorage").start() require("channels") require("jquery") import 'bootstrap' import '../src/application.scss' import Rails from 'rails-ujs' Rails.start()
[package.json] { "name": "sample_blog", "private": true, "dependencies": { "@rails/actioncable": "^6.0.0", "@rails/activestorage": "^6.0.0", "@rails/ujs": "^6.0.3-1", "@rails/webpacker": "4.2.2", "jquery": "^3.5.1", "popper.js": "^1.16.1", "turbolinks": "^5.2.0" }, "version": "0.1.0", "devDependencies": { "webpack-dev-server": "^3.11.0" } }
開発環境
ruby 2.7.1
rails 6.0.3
何が問題でlink_toでdeleteメソッドが飛ばせないのか全くわからない状態です。
分かる方いらっしゃれば教えていただきたいです。。。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/06 14:35
2020/06/06 14:52
2020/06/06 15:07
2020/06/06 15:09
2020/06/06 15:14
2020/06/06 15:18
2020/06/06 15:28
2020/06/06 15:40 編集
2020/06/06 15:45
2020/06/06 16:12
2020/06/06 16:16
2020/06/06 16:24
2020/06/06 16:30
2020/06/06 16:32
2020/06/09 02:59