投稿の保存が行われ, 違うページに移動した先でその内容が確認できるようにしたいです.
Rails6.0にて, Webアプリの開発を勉強しながら行っています. Rails6.0では, form_tagの記述が非推奨とのことをあとから知り, 色々と変更を加えながらレイアウトやルーティング等をいじっていたところ,正しく保存されページ遷移しなくなってしまいました.
発生している問題・エラーメッセージ
エラーというわけではないのですが, 恐らくvalidationに引っかかってないはずなのに, エラーが出てしまい, 再度入力画面になってしまいます.
###期待している処理
期待: ページ入力→バリデーション通過→db保存→ページ移動
現在: ページ入力→バリデーション引っかかる?→db保存できない→もとの入力ページに戻る
該当のソースコード
new.html.erb
<div class="main posts-new"> <div class="container"> <h1 class="form-heading">手紙を書く</h1> <%= form_with scope: :post, url: posts_path, local: true do |form| %> <% if @post.errors.any? %> <div id="error_explanation"> <h2><%= pluralize(@post.errors.count, "error") %> prohibited this post from being saved:</h2> <ul> <% @post.errors.full_messages.each do |msg|%> <li><%= msg %></li> <% end %> </ul> </div> <% end %> <div class="form"> <div class="form-body"> <%= form.label :Dear %><br> <%= form.text_field :dear %> <%= form.label :content %><br> <%= form.text_area :content %> <%= form.label :From %><br> <%= form.text_field :from %> <%= form.submit value="投函する" %> </div> </div> <% end %> </div> </div>
post.rb
class Post < ApplicationRecord validates :dear, presence: true, length: {maximum:20} validates :content, presence: true, length: {maximum:200} validates :from, presence: true, length:{maximum:20} end
posts_controller.rb
class PostsController < ApplicationController def index @posts = Post.all.order(created_at: :desc) end def show @post = Post.find(params[:id]) end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to "/posts" else render "new" end end private def post_params params.require(:post).permit(:title, :content, :title) #asmさんを反映済み end end
routes.rb
Rails.application.routes.draw do root 'static_pages#home' resources :posts get '/', to: 'static_pages#home' get 'about', to: 'static_pages#about' end
migrate_file
class CreatePosts < ActiveRecord::Migration[6.0] def change create_table :posts do |t| t.string :dear t.text :content t.string :from t.timestamps end end end
試したこと
controllerの確認等を自分なりにしたのですが,いまいちわからず, 皆さんの力を借りたいと思い投稿させていただきました.
個人的には, form_tagからform_withに書き換えを試みた過程でなにか記述ミスをしたか, モデルを作る際に何らかのミスをしていたりするのかなと思います.
補足情報(FW/ツールのバージョンなど)
Rails Guideやチュートリアル, チェリー本を参考にしています.
Ruby 2.6.5, Rails 6.0.
追加情報
頂いた@asmさんの回答通りの記述を加えた結果, 以下のようになりました.
2 errors prohibited this post from being saved:
Dear can't be blank
From can't be blank
もともと, この2が3だったのでcontentのみvalidatesを通過したようです. validatesの書き方に問題があるのか, モデル作成時にミスをしているのか...
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/06/30 11:55
2020/06/30 12:06
2020/06/30 12:24