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

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

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

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

Q&A

解決済

1回答

935閲覧

RailsでRouting Error が出る

Aokichingo

総合スコア10

Ruby on Rails 5

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

0グッド

0クリップ

投稿2019/06/17 10:23

前提・実現したいこと

railsで編集ページの更新しようとした際、Routing Errorがでる。

発生している問題・エラーメッセージ

Routing Error
No route matches [PATCH] "/posts/8/update"
Rails.root: /home/ec2-user/environment/pet

Application Trace | Framework Trace | Full Trace
Routes
Routes match in priority from top to bottom

Helper HTTP Verb Path Controller#Action
Path / Url
Path Match
GET /
posts#index

posts_new_path GET /posts/new(.:format)
posts#new

GET /:id(.:format)
posts#show

GET /posts/:id/edit(.:format)
posts#edit

POST /posts/:id/update(.:format)
posts#update

posts_create_path POST /posts/create(.:format)
posts#create

Request
Parameters:

{"utf8"=>"✓",
"_method"=>"patch",
"authenticity_token"=>"7ZB25p82F8sO67At/pEWAObI+q3ifTwls1QphfIdLN2HGoglv+sIgsWf4e+JE3/KWnpDieBzG54cC7ohj2zpIg==",
"post"=>{"title"=>"miyake", "body"=>"cool is cool"},
"commit"=>"Update Post"}
Toggle session dump
Toggle env dump
Response
Headers:

None

該当のソースコード

ruby on rails

補足情報(FW/ツールのバージョンなど)

#edit.html.erb

<h1>投稿編集</h1> <%= form_for @post, url:"/posts/#{@post.id}/update" do |f| %> <p> <%=f.text_field :title %> <% if @post.errors.messages[:title].any? %> <span class="errors"> <%= @post.errors.messages[:title][0] %> </span> <% end %> </p> <p> <%=f.text_area :body %> <% if @post.errors.messages[:body].any? %> <span class="errors"> <%= @post.errors.messages[:body][0] %> </span> <% end %> </p> <p> <%= f.submit %> </p>

<% end %>

#routes.rb
Rails.application.routes.draw do

get "/" => "posts#index"
get "posts/new" => "posts#new"
get "/:id" => "posts#show"
get "posts/:id/edit" =>"posts#edit"

post "posts/:id/update" => "posts#update"
post "posts/create" => "posts#create"

end

#contoller.rb
class PostsController < ApplicationController
def index
@posts = Post.all.order(created_at:'desc')
end

def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to "/" else render 'new' end end def show @post = Post.find(params[:id]) end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) if @post.update(post_params) redirect_to "/" else render 'edit' end end

private
def post_params
params.require(:post).permit(:title, :body)
end
end

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

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

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

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

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

guest

回答1

0

ベストアンサー

routes.rb にて、

post "posts/:id/update" => "posts#update"

HTTP methodを postに指定している為かと思われます。

取り急ぎ、動くようにするには、フォーム部分の 

<%= form_for @post, url:"/posts/#{@post.id}/update" do |f| %>

のところに、

method: post などのオプションを付けることで、
期待通りの動きがするように見えます。

ただ、RESTfulなリソースを使用する場合は、routes.rbにて、

resources :posts

という感じで記述した方が、好ましいかと感じました。

あと、form_formの URLの指定の仕方も少し気になりました。
お使いの Railsのバージョンはどのバージョンをお使いになられていますでしょうか。
5.1以降であれば、form_withなどを使用する方が推奨されていたりします。

投稿2019/06/17 10:45

fshun

総合スコア261

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

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

Aokichingo

2019/06/18 03:54

ありがとうございます! resources :postsでのrouteの設定も覚えていきます。 Rails のバーションは5.0.7.2です!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問