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

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

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

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

Q&A

解決済

2回答

3428閲覧

(rails6)renderを利用したエラーメッセージについて

sakuma321

総合スコア0

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

Ruby on Rails

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

0グッド

0クリップ

投稿2020/04/27 09:21

前提・実現したいこと

ruby on railsで画像投稿アプリを作成しています。
コメントを10文字以内にしたいため、モデルでにバリデーションをかけ、
form_with内で10文字より多いときにrenderでエラーメッセージを表示
させたい。
※ビューを遷移させず、formの中に非同期表示させたい

10文字より多く投稿した場合、エラーにはなってDB登録はされないが
エラー表示が発生しない。

発生している問題・エラーメッセージ

投稿を実行しても、エラーは特になし。

Rendering layouts/_new.html.haml within layouts/application Rendered layouts/_new.html.haml within layouts/application (Duration: 1.9ms | Allocations: 2061) [Webpacker] Everything's up-to-date. Nothing to do Completed 200 OK in 29782ms (Views: 31.1ms | ActiveRecord: 6.4ms | Allocations: 27853)

該当のソースコード

◾️コントローラ blog_controller.rb

@post = Post.create(post_create_params) if @post.save redirect_to :post_image else render "layouts/_new" end

◾️ビュー(form部分)post_image.html.haml

.form_area = form_with model: @post do |form| .field = render 'layouts/new', model: @post = form.label :"comment(under 10 characters)" .br = form.text_field :title .br = form.label :image .br = form.file_field :image .br = form.submit "Post"

◾️ビュー(エラー表示用)_new.html.haml

-if @post.errors.any? .alert %ul -@post.errors.full_messages.each do |message| %li= message

試したこと


バリデーション:10文字以下ならDB保存される、10文字より多い場合されないことは確認。


form_withlocal:trueを入れる
→エラーメッセージはでるが、画面がlayouts/newだけのビューに遷移してしまう。

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

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

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

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

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

guest

回答2

0

コメントを10文字以内にしたいため

状況にもよりますが、フォーム側にmaxlengthをかける、という手段もあります。そもそも幅を超える分が入力できなくなるので、正当に使っている限りにおいてはバリデーションエラーになること自体がなくなります。

投稿2020/04/27 09:26

編集2020/04/27 09:27
maisumakun

総合スコア145183

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

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

sakuma321

2020/04/27 13:00

ご回答いただきありがとうございます。 おっしゃる通り、`maxlength`にて取り急ぎの入力制限を満たすことができそうです、 誠にありがとうございます。 エラー表示も必要になる場合があるため、可能であれば解決しておきたいのですが 考えられることはございますでしょうか。 お手数をおかけしますが、もし何かございましたらご教授頂けますとありがたいです。 よろしくお願いいたします。
guest

0

自己解決

renderによるエラーメッセージの出し方を勘違いしていました。

方法としては、試したことの②でよくて、
renderの指定を変えました。


form_withlocal:trueを入れる
→エラーメッセージはでるが、画面がlayouts/newだけのビューに遷移してしまう。

layouts/newにはエラーメッセージだけをかけばよいと思っていたので、当然
エラーメッセージだけのビューになっていたのですが
renderの後は元々のビューが表示されているアクションを指定
・そのビューの中でエラーがでた際に、layouts/newを表示させる。

で解決しました。
※参考:https://qiita.com/nakanishi03/items/d1be27c74c98855423ab

投稿2020/05/12 20:19

sakuma321

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問