現在、記事投稿機能を実装しています。フォームは、form_withを使いモデルを指定してデータを受け取りたいです。
posts/new.html.haml
Rails
1 %h2 ブログ記事投稿・編集 2 = form_with local:true, model: @article do |f| 3 .form-date.form-group 4 .blog-name 5 %label.blog-label 日付 6 = f.date_field :dating, class: "input-time", name: "post_date", size: "20", placeholder: "日付を入力してください", style: "font-weight: bold;" 7 .form-title.form-group 8 .blog-name 9 %label.blog-label タイトル 10 = f.text_field :title, class: "input-title", name: "title", placeholder:"タイトルを入力してください。", style: "font-weight: bold;" 11 .form-letter.form-group 12 .blog-name 13 %label.blog-label 本文 14 = f.text_area :text, class: "input-control", rows: "15", name: "body", placeholder: "本文を入力してください。", style: "font-weight: bold;" 15 .form-input 16 = f.submit class: "btn btn-primary btn-sm", value: "投稿する"
posts_controller.rb
class PostsController < ApplicationController class Posts def create # ストロングパラメータから精査されたデータだけをインスタンスに格納 @article = Article.new(blogs_params) # インスタンスに保存成功した場合の処理 if @article.save flash[:success] = "ユーザーを登録しました" redirect_to @article # インスタンスの保存に失敗した場合の処理 else flash[:danger] = "ユーザーの登録に失敗しました" render :new end end private def blogs_params params.require(:article).permit(:dating, :title, :text) end end end
routes.rb
Rails.application.routes.draw do # For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html root to: "top#index" resources :posts end
作成したデータベースとテーブルも載せておきます。フォームの引数には、カラム名を指定しています。
リンク内容
どうか質問の確認と返信をよろしくお願いします。
posts/new.html.haml で使っている @article はどこで定義していますか?
そのcodeも載せてください
二つ目のコードのpost_controller.rbで定義しています。
createはposts/new.html.hamlを呼び出すアクションでは無いですよね?
そうですが、posts_controller.rbのnewアクション内で、createアクションと同じ記述をしてもエラー文は変わらないのです。
なぜposts_controllerでArticleを扱っているのでしょうか?
(form_withは、引数として渡されたモデルからurlを決めます)
new と create では同じ記述ではだめです。
new は new.html の準備
create は newの後始末。
Post,Articleという所からするとよくあるSMS的なサイトを作っているのだたお思いますが、まだ無理では無いですか?
その手のものはチュートリアルなどでたくさんあると思います。それらを写経して動くものを作ってから、その応用で自作してみるのが良いです。
new と create では同じ記述ではだめです。
new は new.html の準備
create は newの後始末。
> Post,Articleという所からするとよくあるSMS的なサイトを作っているのだたお思いますが、まだ無理では無いですか?
その手のものはチュートリアルなどでたくさんあると思います。それらを写経して動くものを作ってから、その応用で自作してみるのが良いです。
返信ありがとうございます。もっと勉強してみます。ご教示ありがとうございます。
> なぜposts_controllerでArticleを扱っているのでしょうか?
(form_withは、引数として渡されたモデルからurlを決めます)
モデル名とコントローラ名に命名規制?があることを知らずに作成してしまいました。
規制ではなく 規約 です
規約 に則っておくと色々な宣言を省略出来る のです
それに外れた命名を行うと、railsが勘違いするし、人間も勘違いします
ご教授ありがとうございます!知識が浅く申し訳ありません。