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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

1回答

1661閲覧

RailsでRouting Errorが抜け出せません。

kpg

総合スコア23

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2019/07/11 03:28

編集2019/07/11 04:03

rails初心者です。
初歩的な質問失礼します。

現在、画像を投稿し、その画像の詳細ページでコメントを投稿できる機能を
実装しようとしているのですが、Routing Errorが出ており、解決ができず
止まってしまっています。

pictures_controller
comments_controller
があり、

pictures_controllerのshow.html.haml内でcomments_controllerのcreateアクションで
コメントを投稿し、redirect_toでそのままpictures_controllerのshow.html.hamlに
戻るようにしたいと考えています。

下記がそれぞれのコードです。

rails

1//pictures_controller 2 def show 3 @picture = Picture.find(params[:id]) 4 @comments = @picture.comments.includes(:user) 5 end 6 7//comments_controller 8 def create 9 @comment = Comment.create(text: comment_params[:text], picture_id: comment_params[:picture_id], user_id: current_user.id) 10 redirect_to picture_path(@comment.picture.id) 11 end 12 13//pictures_controllerのshow.html.haml 14 .details-content__comment 15 - if current_user 16 .details-content__comment__form 17 = form_with model: @comment, local: true do |f| 18 .details-content__comment__form__group 19 = f.text_field :comment, class: 'details-content__comment__form__group__text', placeholder: 'コメント' 20 = f.submit 'コメントする', class: 'btn btn-primary'

pictureとcommentはそれぞれアソシエーションは組んでいます。

上記のコードでコメントを投稿すると、下記のエラー文が出ます。

Routing Error
No route matches [POST] "/pictures/6"

pictures_controllerを下記のように修正しましたが、
変わりませんでした。

rails

1//pictures_controller 2 def show 3 @picture = Picture.find(params[:id]) 4 @comment = @comment 5 @comments = @picture.comments.includes(:user) 6 end 7 8

routes.rbは下記の内容です。

rails

1//routes.rb 2Rails.application.routes.draw do 3 devise_for :users 4 root 'pictures#index' 5 resources :pictures do 6 resources :comments, only: [:create] 7 end 8 resources :users, only: [:show] 9end 10

どなたかご教示頂けますと幸いです。

よろしくお願い致します。

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

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

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

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

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

Mugheart

2019/07/11 04:01

routes.rbはどうなっていますか?
kpg

2019/07/11 04:04

Mugheart 様 ご確認頂きありがとうございます。 質問文の中にroutes.rbを追記させて頂きました。 よろしくお願い致します。
guest

回答1

0

ベストアンサー

rb

1@comment 2#=> nil

なので

haml

1= form_with model: nil, local: true do |f|

と同義です。
この場合の送信先がPOST <current_url>となってしまっているのでエラーになっています。

@commentを用意してください。

なお、送信先は

rb

1resources :pictures do 2 resources :comments, only: [:create] 3end

となっている通りpictures/<picture_id>/comments/<comment_id>となるようにしてください。

投稿2019/07/11 04:10

Mugheart

総合スコア2344

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

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

kpg

2019/07/11 04:20

Mugheart 様 ご回答ありがとうございます! form_withを下記のように記述し、 = form_with model: @comment, url: "/pictures/#{@picture.id}/comments", local: true do |f| pictures_controllerを下記、 def show @picture = Picture.find(params[:id]) @comments = @picture.comments.includes(:user) end としたところ、正常に動きました! 前回もご回答頂いた内容と同様の間違いで大変失礼しました。 精進します。 ありがとうございました。
Mugheart

2019/07/11 04:25

= form_with model: [@picture, @comment], local: true do |f| これでもいけますのでご参考までに
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問