2017-04-02 12 views
0

Ruby on Railsの初心者です。作成したオブジェクトを削除しようとすると失敗しました。ここにコードがあります。 controllerRuby on railsで削除メソッドを使用できません

class PuzzlesController < ApplicationController 
    def index 
    @puzzles = Puzzle.all 
    end 
    def show 
    @puzzle=Puzzle.find(params[:id]) 
    end 
    def new 
    @puzzle = Puzzle.new 

    end 
    def create 
     #render plain: params[:puzzle].inspect 
    @puzzle = Puzzle.new(puzzle_params) 
    if(@puzzle.save) 
     redirect_to @puzzle 
    else 
     render 'new' 
    end 
    end 
    def edit 
    @puzzle=Puzzle.find(params[:id]) 
    end 
    def update 
    @puzzle=Puzzle.find(params[:id]) 
    if(@puzzle.update(puzzle_params)) 
     redirect_to @puzzle 
    else 
     render 'edit' 
    end 
    end 
    def destroy 
    @puzzle = Puzzle.find(params[:id]) 
    @puzzle.destroy 

    redirect_to puzzle_path 
    end 
    private def puzzle_params 
    params.require(:puzzle).permit(:title,:body,:category,:difficulty) 
    end 
end 

show

<h2><%= @puzzle.title %></h2> 
    <p><%= @puzzle.body %></p> 
    <p><%= @puzzle.category %></p> 
    <p><%= @puzzle.difficulty %></p> 
<hr> 
<%= link_to "Edit", edit_puzzle_path(@puzzle), :class => 'btn btn-default'%> 
<%= link_to "Delete", puzzle_path(@puzzle), 
      method: :delete, 
      data: {confrim: 'are you sure? '}, 
      :class => 'btn btn-danger'%> 

私はそのようなページを再レンダリングし、削除をクリックしてください。私はインターネット上で多くを検索し、それに対する解決策を見つけることができません。

これは、レールサーバーに関する情報です。

Started GET "/puzzles/1" for ::1 at 2017-04-02 18:51:18 +0930 
Processing by PuzzlesController#show as HTML 
    Parameters: {"id"=>"1"} 
    Puzzle Load (0.5ms) SELECT "puzzles".* FROM "puzzles" WHERE "puzzles"."id" = ? LIM    IT ? [["id", 1], ["LIMIT", 1]] 
    Rendering puzzles/show.html.erb within layouts/application 
    Rendered puzzles/show.html.erb within layouts/application (1.0ms) 
Completed 200 OK in 63ms (Views: 46.2ms | ActiveRecord: 0.5ms) 
+0

質問体に実際のコードを追加してください。コードの画像を追加しないでください。 –

+0

ここにあなたのコードを追加してください。 – matov

+0

どのバージョンのRailsを使用しますか? – spickermann

答えて

0

変更あなたのリダイレクトパス

redirect_to puzzles_path 
+0

変更、まだ同じ – yue

0

あなたのコード内のいくつかの問題があります。

1)link_toパラメータリスト(confirmのタイプミス)が代わりにconfrimで、あります:

は、
<%= link_to 'Delete', puzzle_path(@puzzle), 
     method: :delete, 
     data: { confirm: 'are you sure? '}, 
     class: 'btn btn-danger' %> 

2)ご連絡先destroyメソッドを使用すると、単なるパズルパスにリダイレクトすることはできません。なぜなら、パズルを削除したばかりなのでです。代わりにインデックスページにリダイレクト:

redirect_to puzzles_path 

3)しかし、最も重要です。 method: 'delete'とのリンクはJavaScriptでのみ動作し、Rails 5.0はjQueryに依存します。あなたがリンクはちょうどショーのページにリダイレクトすることを書いたので、私はあなたの資産パイプラインにRailsのJavaScriptファイルが含まれていないと思います。

# Add this to the head of your `views/layout/application.rb`: 
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %> 

# Ensure that your `assets/javascripts/application.js` include the following lines: 
//= require jquery 
//= require jquery_ujs 

ファイルがエラーなしでロードされていることをブラウザのconcoleで確認してください。

+0

あなたに助けていただきありがとうございます、私は1)と2)に間違いを修正しました。 3)レールjaveScriptがapplication.jsに含まれている// = jqueryが必要です // jquery_ujsが必要です //ターボリンクが必要です // = require_tree。"views/layout/application.html.erb"の先頭に、<%= javascript_include_tag 'default'、 'data-turbolinks-track': 'reload'%>という行があります。私は 'デフォルト'を 'アプリケーション'に変更する必要がありますか? – yue

+0

メインのJavaScriptファイルの名前が 'application'で、' default'ではなく、 'javascript_include_tag'を' application'という名前のファイルに変更する必要があります。存在しない 'default'という名前のファイルをロードしようとすると、' 404(not found) 'を取得しなかったのに驚いています。 – spickermann

+0

その行にエラーが表示されます。パズル#showのExecJS :: ProgramError。 TypeError:オブジェクトはこのプロパティまたはメソッドをサポートしていません。 – yue

関連する問題