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

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

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

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

Bootstrap

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

受付中

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

ryoji
ryoji

総合スコア0

Ruby on Rails

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

Bootstrap

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

0回答

0リアクション

0クリップ

612閲覧

投稿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 %>

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

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

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

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

ただいまの回答率
87.20%

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

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

質問する

関連した質問

同じタグがついた質問を見る

Ruby on Rails

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

Bootstrap

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