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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

3回答

3949閲覧

ブログ機能の編集・削除画面でルーティングエラーが表示されます

退会済みユーザー

退会済みユーザー

総合スコア0

Cloud9

Cloud9は、クラウドからのプログラミングが可能になるWebサービス。IDEとしての機能が搭載されており、GitHubやHerokuなど他ツールとの連携も可能です。ブラウザ上で動くため、デバイスに関係なく開発環境を準備できます。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2017/08/07 14:55

どなたかお知恵を貸してください。
Cloud9で簡単なブログを作成しています。
記事作成はできるのですが、プレビュー画面から記事編集・削除を行おうとすると、ルーティングエラーが発生します。

編集画面で「update」ボタンを押した場合↓
イメージ説明

**ただ、元のページに戻って画面を更新すると、編集内容は反映されています。削除の場合も同じです。
**

コードは次の通りです。
controller↓

class BlogsController < ApplicationController def index @blogs = Blog.all end def new @blog = Blog.new end def create Blog.create(blogs_params) redirect_to blogs_path, notice:"ブログを作成しました!" end def edit @blog = Blog.find(params[:id]) end def update @blog = Blog.find(params[:id]) @blog.update(blogs_params) redirect_to blog_path, notice:"ブログを編集しました!" end def destroy @blog = Blog.find(params[:id]) @blog.destroy redirect_to blog_path, notice:"ブログを削除しました!" end private def blogs_params params.require(:blog).permit(:title, :content) end end

routes↓

Rails.application.routes.draw do resources :blogs, only: [:index, :new, :create, :edit, :update, :destroy] end

view↓

<p><%= notice %></p> <h2>ブログ一覧</h2> <% @blogs.each do |blog| %> <p>タイトル:<%= blog.title %></p> <p>本文:<%= blog.content %></p> <%= link_to("ブログを編集する", edit_blog_path(blog.id), data:{confirm: '本当に編集していいですか?'}) %> <%= link_to("ブログを削除する", blog_path(blog), method: :delete, data:{confirm: '本当に削除していいですか?'}) %> <% end %> <%= link_to "ブログを作成する", new_blog_path %>

自分では原因が見つけ切れませんでした…
素人質問ですが、どうぞよろしくお願いいたします。

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ルーティングでshowを指定していないので、ルーティングエラーが出ているのでしょう

やりたい事から想像するに

ruby

1def update 2 @blog = Blog.find(params[:id]) 3 @blog.update(blogs_params) 4 redirect_to edit_blog_path, notice:"ブログを編集しました!" 5end

なのではないかと。

投稿2017/08/08 02:45

chelsy7110

総合スコア596

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/08 05:34

ご回答ありがとうございます! 今回はリダイレクト先をインデックス画面にするという課題だったのですが、リダイレクト先が編集画面であればおっしゃる方法でも成功するので、ぜひ考え方として覚えておきたいと思います!
guest

0

ベストアンサー

update,destroy後はどこにリダイレクトしたいのでしょう?
create後のリダイレクト先と、update後のリダイレクト先が違うようですが合ってますかね

ruby

1 def update 2 @blog = Blog.find(params[:id]) 3 @blog.update(blogs_params) 4 #このリダイレクトがGET blog_pathになっててルートがない 5 redirect_to blog_path, notice:"ブログを編集しました!" 6 end

投稿2017/08/07 17:35

hellomartha

総合スコア329

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/08 05:29

ありがとうございます!これで解決できました! prefixの使い方がよく分かっていなくて、リンクとリダイレクトをごっちゃにしてしまっておりました… テキストの内容に沿って解決できたので、ベストアンサーにさせていただきます!
guest

0

エラー画面に書いてある通りですよ

/blogs/13

というURLは

/blogs/:id

というルーティングにマッチするのですが
そのルーティングの場合
PUT,PATCH,DELETE のHTTP Methodしか受け付けないのです。

編集画面に遷移する場合のルーティングですが、
edit_blog_path は

GET /blogs/:id/edit

というルーティングが設定されているので

/blogs/13/edit

というURLに遷移するように編集ボタンの押下したときの遷移先を指定しないといけません。

投稿2017/08/07 15:45

Tak1016

総合スコア1408

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/07 16:58

ご回答ありがとうございます。 すみません色々試してみたのですが、さっぱり分かりません… 編集画面のコードです。 <%= form_for(@blog) do |f| %> <%= f.label :title %> <%= f.text_field :title %> <br> <%= f.label :content %> <%= f.text_field :content %> <br> <%= f.submit %> <% end %> <%= link_to "ブログ一覧画面にもどる", blogs_path %> form_tagであれば(%= form_tag("/blogs/#{@blog.id}/update")do %)でうまく繋がるのかなあと思うのですが、 今回初めてform_forを使ってみたもので、編集画面のどこにidを入れたら良いのでしょうか? また、削除の場合も同じエラーが出るのですが、リンク内のどこかでidを指定しないといけないのでしょうか? 的外れでしたら申し訳ありません…
Tak1016

2017/08/07 17:13 編集

form_for(@blog, url: blog_path(@blog), html: {method: "patch"}) do |f| methodはpatchでもputでもよいです
退会済みユーザー

退会済みユーザー

2017/08/08 05:36

ありがとうございます! 課題に対してとても高度なご回答をいただき恐縮しています… 今回はリダイレクト先が違うというとても単純なミスだったのですが、教わった内容についても詳しく調べてみようと思います!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問