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

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

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

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

Ruby on Rails 6

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

Q&A

解決済

1回答

989閲覧

Rails form_withでsubmitを行うとルーティングエラー発生。

Tsuyoponta

総合スコア5

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2021/05/08 07:42

編集2021/05/08 08:37

記事投稿アプリを作成しています。
記事情報をフォームに入力して、submitを行うとルーティングエラーが発生します。

エラー内容

ActionController::RoutingError (No route matches [POST] "/articles/new")

![イメージ説明


モデルに@articleを渡しているので、内容が空なら自動的にcreateアクションが実行されると思います。
ルーティングもコントローラーも設定できている(できていると思っている)ので、問題ないと思うのですが何が原因なのでしょうか。

ソースコード

_form.html.erb

html

1<%= form_with model: @article, local: true do |f| %> 2 <div class="form-group"> 3 <%= f.label "画像" %><span class="badge badge-info ml-3">必須</span> 4 <%= f.file_field :image, class: "form-control-file" %> 5 </div> 6 7 <div class="form-group"> 8 <%= f.label "タイトル" %><span class="badge badge-info ml-3">必須</span> 9 <%= f.text_field :title, autofocus: true, autocomplete: 'title', placeholder: "タイトルを入力", class: "form-control" %> 10 </div> 11 12 <div class="form-group"> 13 <%= f.label "本文" %><span class="badge badge-info ml-3">必須</span> 14 <%= f.text_area :text, placeholder: "本文を入力", class: "form-control", rows: "10" %> 15 </div> 16 17 <div class="form-group"> 18 <%= f.submit "投稿する", class: "btn btn-primary btn-block" %> 19 </div> 20<% end %>

new.html.erb

html

1<div class="container p-5"> 2 <div class="shadow p-4 mb-5 bg-white rounded"> 3 <h1 class="text-center text-monospace">記事投稿</h1> 4 <%= render partial: 'form' %> 5 </div> 6</div>

articles.controller.rb

ruby

1class ArticlesController < ApplicationController 2 before_action :authenticate_user!, except: [:index] 3 4 def index 5 end 6 7 def new 8 @artilce = Article.new 9 end 10 11 def create 12 article = Article.new(article_params) 13 if article.save 14 redirect_to root_path 15 else 16 render :new 17 end 18 end 19 20 private 21 22 def article_params 23 params.require(:article).permit(:image, :title, :text).merge(user_id: current_user.id) 24 end 25end 26

routes.rb

ruby

1Rails.application.routes.draw do 2 devise_for :users 3 root to: "articles#index" 4 resources :articles, only: [:index, :new, :create] 5end

確認してみたこと

create.html.erbは作成していないので、viewに渡す必要がないのにarticles.controller.rbcreateアクションに付けていた**@**が原因なのかと思い、削除しましたが解決しませんでした。

@削除前のcreateアクション

ruby

1def create 2 @article = Article.new(article_params) 3 if @article.save 4 redirect_to root_path 5 else 6 render :new 7 end 8end

プライベートメソッドとストロングパラメーターを定義して、それをcreateアクションに引数で渡しているので保存の許可はできています。

利用環境

  • Ruby 3.0.1
  • Rails 6.1.3

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

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

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

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

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

hatsu

2021/05/08 08:32

routes.rbにarticlesのnewアクションが書かれていないとかってありませんでしょうか? config/routes.rbのファイルも載せていただけるとヒントになるかも知れません。
Tsuyoponta

2021/05/08 08:39

失礼しました。質問内容がルーティングエラーなのにroutes.rbを失念しておりました。 resourcesにnewアクションを記述しています。
hatsu

2021/05/08 08:54

[POST] "/articles/new" /articles/newにPostでリクエストされているのがおかしいので、 <%= form_with model: @article, url: articles_path, method: :post, local: true do |f| %> みたくリクエスト先を明示するとどうなるでしょうか!? ちなみにnew.html.erbのファイルはapp/views/articlesフォルダに存在する認識です
Tsuyoponta

2021/05/08 09:26

newアクションのtypoが原因でした。 お手数おかけしました!
guest

回答1

0

ベストアンサー

def new
@artilce = Article.new
end

よくみると、@articleをtypoしています。

投稿2021/05/08 08:46

asm

総合スコア15149

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

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

Tsuyoponta

2021/05/08 09:25

ありがとうございます!typoでした???? typoの気づきを助けてくれる、オススメのツールなどありますでしょうか。
asm

2021/05/08 09:39 編集

残念なことに私は知りません ただ、今回の場合は明らかにform_withがおかしいので (おそらくブラウザから開発者ツールで見ると<form>タグにURLが設定されていない筈) viewにてform_withの入力である@articleを出力してみる等でデバッグできたかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問