ビューの任意の位置にエラー文を表示できる
errors.full_messagesはhamlやerbの中に配置することができるので、エラー文を自由に配置することができます。controllerから指定するflashメッセージと比較して、自由度高く使うことができます。
ほとんど以下のサイトを参考にさせていただいています。
その上で自分が次に使いやすいようにしています。
日本語化の方法ものっているので、気になる方はぜひ↓
http://ruby-rails.hatenadiary.com/entry/20140810/1407623400
エラー文が表示されるまでの流れ
MVC全てに記述
0.(ビューでエラーになる内容をフォームに入力)
↓
1.モデルでエラーを感知して
↓
2.コントローラで同じページを表示するように
↓
3.ビューでエラー文の位置を指定
記事でもこの順番で書いていきます。
具体的にどう書けばいいか。
まず、モデルでエラーを検知しないとダメですね。
バリデーションの記述をモデルにします↓
hoge.rb
class Hoge < ApplicationRecord
validates :fuga, uniqueness: true, presence: true
end
コントローラではエラー文にはredirect_toではなくrenderを使います↓
redirect_toでは再読み込みになり、errors.full_messagesのエラー文は表示されません。
(成功の場合はflashメッセージを使っています。)
hoge_controller.rb
def create
@hoge = Hoge.find(params[:id])
if @chatgroup.save
redirect_to root_path, notice: "グループ作成完了!"
else
render :new
end
end
ビューでは表示したい場所に、こんな感じで書けば大丈夫です。↓
hoge.haml
.hoge-form__errors
- if @hoge.errors.any?
%ul
-@hoge.errors.full_messages.each do |message|
%li
=message
画像の中の赤文字の部分がerrors.full_messagesの表示です↓
不足点や修正点ありましたらご指摘いただけると嬉しいです。