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

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

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

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

Q&A

3回答

942閲覧

「Rails」form_withメソッドで、No route matches [PATCH] "/posts"が表示されてしまいました。解決案お願いします!

suirunakamura

総合スコア16

Ruby on Rails

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

0グッド

0クリップ

投稿2020/08/15 10:28

記事投稿機能の実装をおこっなっています。form_withメソッドを使用し情報を渡そうとしています。下記のコードは、posts/new.html.hamlファイルとposts_controller.rbファイルを添付しました。
posts/new.html.haml

= render partial: 'shared/header' %body .container .row .col-md-8.col-md-offset-2 %h2 ブログ記事投稿・編集 = form_with url: posts_path,model: article,method: "POST",local: true, do |f| .form-date.form-group .blog-name %label.blog-label 日付 = f.date_field :dating, class: "input-time", name: "post_date", size: "20", placeholder: "日付を入力してください", style: "font-weight: bold;" .form-title.form-group .blog-name %label.blog-label タイトル = f.text_field :title, class: "input-title", name: "title", placeholder:"タイトルを入力してください。", style: "font-weight: bold;" .form-letter.form-group .blog-name %label.blog-label 本文 = f.text_area :text, class: "input-control", rows: "15", name: "body", placeholder: "本文を入力してください。", style: "font-weight: bold;" .form-input = f.submit class: "btn btn-primary btn-sm", value: "投稿する"

posts_controller.rb

class PostsController < ApplicationController def new @article = Article.new(blogs_params) # インスタンスに保存成功した場合の処理 if @article.save flash[:success] = "ユーザーを登録しました" redirect_to "/posts/new" # インスタンスの保存に失敗した場合の処理 else flash[:danger] = "ユーザーの登録に失敗しました" render :new end end def create # ストロングパラメータから精査されたデータだけをインスタンスに格納 @article = Article.new # インスタンスに保存成功した場合の処理 if @article.save flash[:success] ="ユーザーを登録しました" redirect_to "/post/new" # インスタンスの保存に失敗した場合の処理 else flash[:danger] = "ユーザーの登録に失敗しました" render :new end end private def blogs_params params.permit(:dating, :title, :text) end end

どなたか、問題点や解決案・ご教授どうかお願いします!

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

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

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

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

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

no1knows

2020/08/15 12:02 編集

作っているアプリは、現状、posts以外にもコントローラーがありますか?それともまだpostsだけですか?
suirunakamura

2020/08/16 02:00

返信ありがとうございます! 他に、top_controllerがあります。
maisumakun

2020/08/17 06:21

なぜ「PostsControllerでArticleを扱う」という構造がそのままなのでしょうか?
maisumakun

2020/08/18 03:12

> 新しく、Articlesコントローラを作成しました。 でしたら、質問のコードもそれに合わせて直してください。
suirunakamura

2020/08/18 03:51

わかりました!申し訳ございません。
guest

回答3

0

CRUDなどのRailsの作法の理解が十分でないなかで、一からコードを書いて、それを理解するのは難しいと思います。
ということで回答ではなく、アドバイスです。(が、こっちのほうが期待するものを早く作れる可能性が高いです。)

①アプリを新しく作りなおしましょう。
rails new sample-appとか

②scaffoldを利用して雛形を作りましょう。
rails g scaffold article post_date:date title:string content:text

localhost:3000/articlesにアクセスしましょう。

これだけで質問にある**「記事投稿機能の実装をおこっなっています。」**がすべて完了します。

あとは、残りのtop_controllerを追加していくと良いかと思います。


またscaffoldで何が行われているかは下記を熟読いただくと理解も深まりやすいかと思います。

http://kanjihtmt.github.io/blog/2015/04/02/scaffold/

投稿2020/08/18 03:39

no1knows

総合スコア3365

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

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

suirunakamura

2020/08/18 04:19

ありがとうございます! scaffoldについては調べたことがあります。基本的に、コントローラやモデルを作成するときは、rails g controllerコマンドや、rails g modelコマンドは使わずに、rails g scaffoldコマンドを使用するのでしょうか?
no1knows

2020/08/18 04:37

scaffoldは、controllerやmodelなどをセットで作ってくれるものとなります。(詳しくは下記リンク) modelだけ作りたければ、rails g modelを利用するなど状況に応じて使い分ける形になります。 https://qiita.com/kodai_0122/items/14494a3848654f32909d 個人的には、ScaffoldのコードがRailsの基本系だと思っているので(標準で実装されているので)、是非、scaffoldのコードを1行1行追って理解を深めるようにしていただければと思います。
suirunakamura

2020/08/18 04:47

> 個人的には、ScaffoldのコードがRailsの基本系だと思っているので(標準で実装されているので)、是非、scaffoldのコードを1行1行追って理解を深めるようにしていただければと思います。 そうなのですね、理解が薄く申し訳ないです、、はい、理解を深めて行きます! ご教授ありがとうございます!
no1knows

2020/08/18 05:09

あと全体像を把握するために下記もご一読いただくと良いかも知れません。 https://hnavi.co.jp/knowledge/blog/ruby-on-rails/ > あらかじめ完成している土台(つまりscaffold)に、必要最低限のプログラムを書くだけでアプリケーションを作ることができます。 個人的には、Railsというフレームワークメリットを最大限活用したアプリ開発方法が良いのかなぁと思っています。
suirunakamura

2020/08/18 05:59

上記の記事拝見しました。参考資料ありがとうございます!MVCの構造を最大限に生かしたアプリ開発ですね。ECサイトやSNS、webサイトの開発の他にもクローラの開発もRailsで実装できることに興味を持ちました。webサイトにクローラ機能の実装にも挑戦してみようと思いました。 ご教授ありがとうございます。
suirunakamura

2020/08/18 06:32

scaffoldコマンドを使用するだけで簡単な記事投稿機能の実装ができるんですね。コントローラファイルやモデルファイルの作成だけでな、ファイルの中身も書いてくれて機能の実装までしてくれるのは、知りませんでした。 scaffoldコマンドについてもっと調べてみます。基本的な知識もなく申し訳ないです、、 ありがとうございます!
guest

0

= form_with model: @article, local: true, do |f|
で@articleの内容に応じて post create と patch updateに切り替わります。

なお、controllerのnew、createおかしいです。
new は @article = Article.new だけで良いし
create は@article = Article.new(blogs_params) です。

postなのに blog_paramsなのはコピってきましたね?blogs_paramsもおかしい
params.require(:article).permit(:dating, :title, :text)

そもそも PostController なのに Articleなのもおかしい。

あ、だから url: つけているのか。。。。。

ArticleのハンドリングをPostControllerでやるのはやめたほうが良いです。
routesも含めて articleにしましょう

投稿2020/08/15 14:43

winterboum

総合スコア23329

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

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

suirunakamura

2020/08/16 04:12

> ArticleのハンドリングをPostControllerでやるのはやめたほうが良いです。 routesも含めて articleにしましょう 回答ありがとうございます!かしこまりました。
suirunakamura

2020/08/16 07:36

articlesコントローラを作成し、フォームもarticles/new.html.hamlに置き換えました。 しかし、ActionView::SyntaxErrorInTemplate in ArticlesController#new と、投稿画面に移動しようとした際に、エラーが発生してしまいました。 まだ、どこかPosts_controllerを指定しているところがある?ように思えます。 何か、原因ありそうですか?articles_controller.rbやarticlesのnewアクションのviewの記述は、 postの時のをコピペしたので、問題なさそうなのですが、、 https://gyazo.com/4a85721abe7dacc643a5adc03d2ba5d0
winterboum

2020/08/16 09:42

form_with の後の url: artilcles, を削除してください。 この状態だとurlは無くても大丈夫です。 エラーは articles が無定義で使われてるから、ですね。書くなら artilce_path
guest

0

= form_with url: posts_path,model: @article, local: true, do |f|

modelにはnewアクションで作成したインスタンスを記述します。
methodはおそらくデフォルトでPOSTになっていると思います。

投稿2020/08/15 12:52

nasuk47

総合スコア311

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

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

suirunakamura

2020/08/16 02:03

form_withメソッドなので、methodを指定しなくても、postメソッドが 適用されるようですが、指定されていなかったので指定してました。
winterboum

2020/08/18 03:55

n1knowsさんのアドバイスにしたがってやってみてはどうでしょう
suirunakamura

2020/08/18 04:17

新しく、アプリケーションを作成する方法ですね、そうしてみます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問