lebronkoukou
@lebronkoukou (光聖 西田)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

コメント機能でエラー分が表示されない

投稿に対するコメントのエラー文

railsで投稿アプリを作成しているのですが、投稿に対するコメントのエラー分が出ずに困っています。
ちなみに各バージョンは以下の通り

ruby 2.6.5
rails 6.0.0

viewはこんな感じ

Image from Gyazo

見た目を整えていないため何が何だか分かりにくいですが、投稿に対して(上記viewは投稿コントローラーのshowアクション)コメントを作成すると右のグレーのボックスに表示されるという実装です。
作成自体は実装が完了し、お気づきかとは思うのですが空の文章でも投稿できてしまったためバリデーションでモデルをいじったあと再度確認すると「エラー文ないやん!?」となっています。
分かりやすいように水色のボックスが今回のエラー分が入っているdivタグです。

または、問題・エラーが起きている画像をここにドラッグアンドドロップ

各々記述はこんな感じ

yell(コメント)モデルは以下

class Yell < ApplicationRecord
  belongs_to :user  
  belongs_to :life

  validate :body_cannot_blacklist_words


  def body_cannot_blacklist_words
    blacklist = ['死ね', '馬鹿']
    if content.present? && blacklist.any?{ |word| content.include?(word) }
      errors.add(:contain_blacklist_words, ": 禁止単語が含まれています。")
    end
  end



  with_options presence: true do
    validates :content,  length: { maximum: 300 }
  end
end

コメントはユーザーとlife(投稿)モデルに紐付けています。
body_cannot_blacklist_wordsでは特定のワードの保存を禁止しておりデータベースにもちゃんと弾かれていたためここは今のところ問題ないかと、

投稿のソースは以下

def show
    @life = Life.find(params[:id])
    @yell = Yell.new
    @yells = @life.yells
  end

今回実装したいビューが投稿の詳細なのでshowアクションに上記記述をしています。

該当するビューファイルは以下

<div class="lives-comment-box">
      <%= form_with model: [@life, @yell], class: 'yell-form', id: "form", local: true do |f| %>
        <div class="errors-box">
          <%= render 'shared/error_messages', model: f.object %>
        </div>
        <div class="form-input">
          <%= f.text_area :content, class: 'form-yell', placeholder: yellholder, rows:"7", id: "content" %>
        </div>
        <%= f.submit '送信', class: 'yell-submit', id: "submit" %>
      <% end %>
      <div class="yell-lists">
        <% @yells.each do |yell| %>
          <div class="yell-content">
            <%= yell.content%>
            <div class="yell-created">
              <%= time_ago_in_words(yell.created_at) %></div>
          </div>
        <% end %>
      </div>

    </div>

上記form_withで投稿とコメントモデルを記述しrenderでエラーメッセージを呼び出しています。
おそらくrenderに渡しているf.objectに問題があるのか?と推測したのですが、form_withに渡している[@life, @yell]に書き換えてもダメでした、、、
もしわかる方いらっしゃればどうぞよろしくお願いいたします。

自分で試したこと

ここに問題・エラーに対して試したことを記載してください。

0

1Answer

ログとか変更箇所とかが無いのでよく分かりませんが、

validates :content,  length: { maximum: 300 }

ここを追加したのに空文字投稿でもエラーが表示されてない?ということですか?

<%= render 'shared/error_messages', model: f.object %>

この中身はどうなっていますか?

後、大前提としていきなりmodel、controllerを作って表示しながらデバックするより、まずはmodel、rspec等での単体テストを行ってmodel自体が思っているとおりに動いているかどうか確定させてから、controllerへ組み込んでいったほうが確実にスムーズにプログラムできます。

0Like

Your answer might help someone💌