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

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

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

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

Q&A

0回答

1047閲覧

rails エラーメッセージは表示できるようになったがなぜできるようになったか分からない

ryoji

総合スコア0

Ruby on Rails

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

Bootstrap

BootstrapはウェブサイトデザインやUIのWebアプリケーションを素早く 作成する可能なCSSフレームワークです。 Twitter風のデザインを作成することができます。

0グッド

0クリップ

投稿2022/03/27 07:08

編集2022/03/29 01:49

追加の疑問

何とか表示できるようになったがなぜ表示できるようになったか分からないので解説して頂けると助かります。
(変更後のnew.html.erbとエラーの部分テンプレートを載せておきますのでよろしくお願いします。)
使い方があっているかわかりませんがよろしくお願いします🤲

質問内容

Webアプリケーションを制作中なのですがエラーメッセージが表示されないです。
バリデーションを設定してnewファイルにエラー文の記述を行ったが表示されないRendered shared/_error_messages.html.erbとターミナルに表示されているのでおそらくファイルの参照はできているのかなと思います。
画像の表示はActive Storageを使いました。
railsを始めたばかりで、わからないことも多いですが、アドバイスいただけると嬉しいです。

ターミナルの表記

Started POST "/posts" for ::1 at 2022-03-27 15:44:17 +0900 Processing by PostsController#create as JS Parameters: {"authenticity_token"=>"5KrLef6Yr8dWfQhaebWnreaLLboZtt5SKS0jUCndfMhAKNaGDE95+9LBAoAAqABOEInGIkFpe7wOcdsQmGwkXQ==", "post"=>{"title"=>"", "content"=>""}, "commit"=>"投稿"} Rendering posts/new.html.erb within layouts/application Rendered shared/_error_messages.html.erb (Duration: 1.4ms | Allocations: 408) Rendered posts/new.html.erb within layouts/application (Duration: 3.6ms | Allocations: 885) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 23ms (Views: 16.5ms | ActiveRecord: 0.0ms | Allocations: 7879)

post.rb

class Post < ApplicationRecord with_options presence: true do validates :title validates :content validates :image end has_one_attached :image end

posts_controller.rb

class PostsController < ApplicationController def index @posts = Post.all end def new @post = Post.new end def create @post = Post.new(post_params) if @post.save redirect_to root_path else render :new end end def show @post = Post.find(params[:id]) end def destroy @post = Post.find(params[:id]) @post.destroy redirect_to root_path end def edit @post = Post.find(params[:id]) end def update @post = Post.find(params[:id]) @post.update(post_params) redirect_to post_path(@post.id) end private def post_params params.require(:post).permit(:title, :content, :image) end end

new.html.erb

<div> <div class="col-md-4 offset-md-4"> <h2 class="text-center pt-5">新規投稿🐈‍⬛</h2> <%= form_with model: @post do |f| %> <%= render 'shared/error_messages', { target: @post } %> <div class="form-group" > <%= f.file_field :image, placeholder: "ka", class: "form-control" %> </div> <div class="form_group pt-4 pb-3"> <%= f.text_field :title, placeholder: "タイトル", class: "form-control" %> </div> <div class="form-group" > <%= f.text_area :content, placeholder: "内容", rows: 7, class: "form-control" %> </div> <div class="text-center"> <%= f.submit "投稿", class: "btn btn-primary mt-2" %> </div> <% end %> </div> </div>

_error_messages.html.erb

<% if target.errors.any? %> <div class="text-danger" role="alert"> <h3>エラー項目があります</h3> <ul> <% target.errors.full_messages.each do |message| %> <li><%= message %></li> <% end %> </ul> </div> <% end %>

確認したこと

コードは確認したところあっているのではないかと思います。バリデーションが通った時は問題なく保存・表示できていました。bootstrapを利用しているため表示されないのかと思って調べてみましたが分かりませんでした。

お忙しいと思いますが解決にご助力よろしくお願いします🙏

変更後のコード

確認していただいて解説していただけると助かります。

new.html.erb

<div> <div class="col-md-4 offset-md-4"> <h2 class="text-center pt-5">新規投稿🐈‍⬛</h2> <%= form_with(model:@post, local: true) do |f| %> <%= render 'shared/error_messages', object: f.object %> <div class="form-group" > <%= f.file_field :image, placeholder: "ka", class: "form-control" %> </div> <div class="form_group pt-4 pb-3"> <%= f.text_field :title, placeholder: "タイトル", class: "form-control" %> </div> <div class="form-group" > <%= f.text_area :content, placeholder: "内容", rows: 7, class: "form-control" %> </div> <div class="text-center"> <%= f.submit "投稿", class: "btn btn-primary mt-2" %> </div> <% end %> </div> </div>

_error_messages.html.erb

<% if object.errors.any? %> <div id="error_explanation" class="alert alert-danger"> <ul class="mb-0"> <% object.errors.full_messages.each do |msg| %> <li><%= msg %></li> <% end %> </ul> </div> <% end %>

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問