Milky_English
@Milky_English

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【Rails】errors.full_messages が表示されない

解決したいこと

現在、Rails勉強中の初心者です;;
Ruby on RailsでTwetterのようなWebアプリを作っています。
バリデーションに失敗した際に、自動的にエラーメッセージを出したいのですが、うまくいきません...。どなたか助けていただけると助かりますorz

発生している問題・エラー

バリデーションに失敗した際に、自動的にエラーメッセージを出したいが、出てこない。

該当するソースコード

既に投稿されたものを編集する際に、内容を空または140字以上にして保存しようとした際に、自動的にエラーメッセージを出したいのです。

以下のようにコードを書き、
・内容を空または140字以上にして保存しようとした際に保存されない
・内容を空または140字以上にして保存しようとした際に編集画面にrenderされる
ことは確認できたのですが、エラーメッセージの表示がされません。

routes.rb

post "posts/:id/update" => "posts#update"

post.rb

class Post < ApplicationRecord
  validates :content, {presence: true, length: {maximum: 140}}
end

posts.controller.rb

  def update
    @post = Post.find_by(id: params[:id])
    @post.content = params[:content]

    if @post.save
      redirect_to("/posts/index")
    else
      render("posts/edit")
    end
  end

edit.html.erb

<div class="main posts-new">
  <div class="container">
    <h1 class="form-heading">編集する</h1>

    <%= form_tag("/posts/#{@post.id}/update") do %>

    <div class="form">
      <div class="form-body">

          <% @post.errors.full_messages.each do |message| %>
            <div class="form-error">
              <%= message %>
            </div>
          <% end %>

        <textarea name="content"><%= @post.content %></textarea>
        <input type="submit" value="保存">
      </div>
    </div>

    <% end %>

  </div>
</div>

GitHubはこちらです。
https://github.com/milky-airi/tweet_app

お手数おかけしますが、どなたかご教示いただけますと幸いです;;

Rails 7.0.5
ruby 3.1.2p20

0

1Answer

こちらの記事を参考に、updateアクションを書き換えて、解決しました!

def update
@post = Post.find_by(id: params[:id])
@post.content = params[:content]

if @post.save
  redirect_to("/posts/index")
else
  # render("posts/edit")
  render :edit, status: :unprocessable_entity
end

end

0Like

Your answer might help someone💌