質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

89.63%

【Rails 6】destroy メソッドが動作しない

解決済

回答 2

投稿

  • 評価
  • クリップ 1
  • VIEW 199

Kantan.lab

score 12

開発環境

  • PC:Mac
  • Os:Catalina 10.15.1
  • ruby2.6.3
  • Rails 6.0.1

destroyアクションを実行しようとしてもShowアクションが実行されてしまう。

標題のとおりですが、削除ボタンを押すとshowアクションが呼ばれてしまう状態です。

調べたところ、jQueryが関係しているようですが、問題なくrecuireしています。
https://teratail.com/questions/22994

基本的な質問で申し訳ございませんが、初学者のためご教示いただけますと幸いです。

以下ソースコード

controller

class BoardsController < ApplicationController
    before_action :set_target_board, only: %i[show edit update destroy]

    def index
        @boards = Board.page(params[:page])
    end

    def new
        @board = Board.new #boardモデルからインスタンスを発行している。
        # binding.pry
    end

    def create
       board = Board.create(board_params)
       flash[:notice] = "「#{board.title}」の掲示板を作成しました。"
       redirect_to board
        # binding.pry
    end

    def show
    end

    def edit
    end

    def update
        @board.update(board_params)
        redirect_to @board
    end

    def destroy
        @board.delete
        redirect_to boards_path, flash: { notice: "「#{@board.title}」の掲示板を削除しました。"}
    end


    private

    def board_params
        params.require(:board).permit(:name, :title, :body)
    end

    def set_target_board
        @board = Board.find(params[:id])
    end
end

index.html

<div class="d-flex align-items-center">
    <h1>掲示板一覧</h1>
    <div class="ml-auto boards_linkBox">
        <%= link_to '新規作成',new_board_path, class: 'btn btn-outline-dark' %>
    </div>
</div>
<% if flash[:notice] %>
    <div class="alert alert-denger"><%= flash[:notice]%></div>
<% end %>
<table class="table table-hover boards_table">
    <thead class="thead-dark">
        <tr>
            <th>ID</th>
            <th>タイトル</th>
            <th>作成者</th>
            <th>作成日時</th>
            <th>更新日時</th>
            <th></th>
            <th></th>
        </tr>
    </thead>
    <tbody>
        <% @boards.each do |board| %>
        <tr>
            <th><%= board.id %></th>
            <td><%= board.title %></td>
            <td><%= board.name %></td>
            <td><%= board.created_at.to_s(:datetime_jp) %></td>
            <td><%= board.updated_at.to_s(:datetime_jp) %></td>
            <td><%= link_to '詳細', board, class: 'btn btn-outline-dark' %></td>
            <td><%= link_to '削除', board, class: 'btn btn-outline-dark', method:  :delete %></td>
        </tr>
        <% end %>
    </tbody>
</table>

<%= paginate @boards%> <%# kaminari gem で用意されたヘルパーメソッド%>
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • flogcode

    2019/11/23 21:01 編集

    javascriptはどのように読み込んでいますか?
    ソースコードのどこかに `javascript_pack_tag` や `javascript_pack_tag` などの記述があればそれです

    キャンセル

  • Kantan.lab

    2019/11/23 21:30

    ありがとうございます。

    javascriptのpathは,
    `app/javascript/paks/application.js`

    内容は、
    ```ここに言語を入力
    // This file is automatically compiled by Webpack, along with any other files
    // present in this directory. You're encouraged to place your actual application logic in
    // a relevant structure within app/javascript and only use these pack files to reference
    // that code so it'll be compiled.

    require("@rails/ujs").start()
    require("turbolinks").start()
    require("@rails/activestorage").start()
    require("channels")


    // Uncomment to copy all static images under ../images to the output folder and reference
    // them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
    // or the `imagePath` JavaScript helper below.
    //
    // const images = require.context('../images', true)
    // const imagePath = (name) => images(name, true)
    //= require jquery3
    //= require popper
    //= require bootstrap-sprockets
    //= require jquery_ujs
    //= require turbolinks
    //= require_tree .
    ```

    です。

    キャンセル

回答 2

checkベストアンサー

+1

JavaScriptがビューのテンプレートHTML側から読み込めていない。というケースがよくあるようなのでそちらを確認した方がよいと思います。

拝見したところ Webpacker を使っているようですね。

views/layouts/application.html.erb というファイルに

<%= javascript_pack_tag 'application' %>

のような記述はありますか?

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/11/24 14:24

    ありがとうございます!治りました!

    というのは、
    当初rails6を立ち上げたときに、

    views/layouts/application.html.erb
    `<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>`

    が邪魔して起動できませんでした。※コメントアウトして起動できた。

    そして後ほど調べたところ
    `gem "webpacker"`が必要とわかりインストールしご指摘いただいた上記の記述を再度記載した後、削除ができるようになりました。


    助かりました、私自身Webpackerを理解していませんでした。

    勉強します。

    改めてありがとうございました。

    キャンセル

+1

ありがとうございます。

javascriptのpathは,
app/javascript/paks/application.js

内容は、

// This file is automatically compiled by Webpack, along with any other files
// present in this directory. You're encouraged to place your actual application logic in
// a relevant structure within app/javascript and only use these pack files to reference
// that code so it'll be compiled.

require("@rails/ujs").start()
require("turbolinks").start()
require("@rails/activestorage").start()
require("channels")


// Uncomment to copy all static images under ../images to the output folder and reference
// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)
// or the `imagePath` JavaScript helper below.
//
// const images = require.context('../images', true)
// const imagePath = (name) => images(name, true)
//= require jquery3
//= require popper
//= require bootstrap-sprockets
//= require jquery_ujs
//= require turbolinks
//= require_tree .

です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 89.63%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる