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

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

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

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails 6

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

Q&A

解決済

2回答

771閲覧

gem deviseのヘルパーメソッドを無効にする方法を知りたい

moai891

総合スコア9

Devise

Deviseとは、Ruby-on-Railsの認証機能を追加するプラグインです。

Haml

Haml(HTML abstraction markup language)は、HTML/XHTMLを効率的に記述するためのマークアップ言語および記法です。

Ruby

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

Ruby on Rails 6

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

0グッド

0クリップ

投稿2020/08/13 03:09

いつもお世話になっております。ユーザー新規登録についてgem deviseを利用しております。
バリデーションメッセージの表示で、自前のフォームビルダーを使用します。そのため、デフォルトで定義されているdeviseのバリデーションメッセージを表示するヘルパーメソッドが不要になったのですが、これを無効にする方法が分かりません。
アドバイス頂けたら幸いです。よろしくお願いします。
(deviseのヘルパーメソッドを無効にすれば良いという考えですが、違う点で問題がございましたら教えてください。)

なお、以下の方法がベストプラクティスであれば良いのですが、上記の問題を解決する手段として以下2つは考えておりますので、それ以外の方法を希望します。

  • devise/shared/_error_messages.html.hamlを削除する
  • 発生する不要なHTMLをCSSでhidden等使用して非表示にする

解決したいこと

バリデーションメッセージの表示でgem devise既存のバリデーションメッセージを消したい。バリデーションメッセージはフォームビルダーを定義し、そちらを利用する。

  • 消したいメッセージの画像

https://gyazo.com/83c0db7c8ef40befd32c9d5f821df55f

環境など

  • Rails 6.0.3.1
  • ruby 2.7.1
  • gem devise
  • ユーザー登録はウィザード形式を実装中

関連コード

  • devise/registration/new.html.haml
%h2 ユーザー情報登録 = form_for(@user, url: user_registration_path) do |f| -# = render "devise/shared/error_messages", resource: @user .field = f.label :nickname %br/ = f.text_field :nickname .field = f.label :email %br/ = f.email_field :email, autofocus: true, autocomplete: "email" .field = f.label :password - if @minimum_password_length %em (#{@minimum_password_length} characters minimum) %br/ = f.password_field :password, autocomplete: "new-password" .field = f.label :password_confirmation %br/ = f.password_field :password_confirmation, autocomplete: "new-password" .actions = f.submit "Next" = render "devise/shared/links"
  • devise/registration/new_profile.html.haml
= render "shared/header" = render "shared/nav" .profile-reg-wrapper .profile-reg %h2.profile-reg__title プロフィールの登録 .profile-main .profile-main__form = form_for @profile, builder: WithErrorFormBuilder do |f| = render "devise/shared/error_messages", resource: @profile .field--1 = f.label "電話番号(半角入力)", class: 'label-reg-profile--1' %br/ = f.text_field :phonenumber, autofocus: true, autocomplete: "phonenumber", placeholder: "半角入力", class: "text-space" .field = f.label "年齢(半角入力)", class: 'label-reg-profile' %br/ = f.text_field :old, autofocus: true, autocomplete: "old", placeholder: "半角入力", class: "text-space" .field = f.label "職業", class: 'label-reg-profile' %br/ = f.collection_select :job ,Job.all, :id, :name, prompt: "--" .field = f.label "経験年数", class: 'label-reg-profile' %br/ = f.text_field :experience, autofocus: true, autocomplete: "experience", placeholder: "半角入力", class: "text-space" 年 .field = f.label "練習頻度", class: 'label-reg-profile' %br/ = f.collection_select :practice_time ,PracticeTime.all, :id, :name, prompt: "--", class: "selectbox-space" .field = f.label "詳細", class: 'label-reg-profile' %br/ = f.text_area :detail, autofocus: true, autocomplete: "detail", placeholder: "入力してください", class: "text-space--detail" .field = f.label "クラブ名", class: 'label-reg-profile' %br/ = f.text_field :club, autofocus: true, autocomplete: "club", placeholder: "入力してください", class: "text-space" .field = f.label "プロフィール画像", class: 'label-reg-profile' %br/ = f.file_field :avatar , class: "image-input-space" .actions-reg = f.submit "登録する", class: 'actions-reg__btn' -# = render "devise/shared/links" = render "shared/footer"
  • devise/shared/_error_messages.html.haml
- if resource.errors.any? #error_explanation %h2 = I18n.t("errors.messages.not_saved", | count: resource.errors.count, | resource: resource.class.model_name.human.downcase) | %ul - resource.errors.full_messages.each do |message| %li= message
  • with_error_form_builder.rb
class WithErrorFormBuilder < ActionView::Helpers::FormBuilder # エラーメッセージオブジェクトが格納されていたらエラーエッセージを表示するli要素を含んだ、ulを作成する def pick_errors(attribute) return nil if @object.nil? || (messages = @object.errors.messages[attribute]).nil? lis = messages.collect do |message| %(<li class="error-message">#{@object.errors.full_message(attribute, message)}</li>) end.join %(<ul class="error">#{lis}</ul>).html_safe end # 既存のフォールビルダーに対し、エラーメッセージの有無により、通常通りのヘルパーメソッドが、pick_errorsの呼び出しを加えたメソッドにする def text_field(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def email_field(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def password_field(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def telephone_field(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def date_select(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def collection_select(attribute, select, key, value, options = {}, include = {}) return super if options[:no_errors] super + pick_errors(attribute) end def fields_for(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def number_field(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end def text_area(attribute, options = {}) return super if options[:no_errors] super + pick_errors(attribute) end end
  • profile.rb
class Profile < ApplicationRecord belongs_to :user, optional: true validates :old, :job, :experience, :phonenumber, :practice_time, presence: true mount_uploader :avatar, AvatarUploader end

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

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

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

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

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

guest

回答2

0

「バリデーションメッセージの表示でgem devise既存のバリデーションメッセージを消したい。バリデーションメッセージはフォームビルダーを定義し、そちらを利用する。」
が、「何をしたいのか」が微妙なところが有ります。

  1. Deviseのvalidationと違うことをしたい
  2. 同じ事をチェックするのだが、メッセージが気に食わない
  3. メッセージを出す場所を変えたい

質問をちょっと見すると1の様に見えるのですが、「フォームビルダーを定義し、そちらを利用する。」というのは3の様にも見える。
1,2,3どれをやりたいのでしょう
no1knowsさんは1のつもりで回答されています。

投稿2020/08/13 06:25

winterboum

総合スコア23349

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

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

moai891

2020/08/13 14:15

ご回答ありがとうございます。やりたいことは3.メッセージを出す場所を変えたいでした。 new_profile.html.hamlで、以下の行を消したら理想通りになりました。 = render "devise/shared/error_messages", resource: @profile 質問の仕方が良くなかったと思いますので、改善していきたいと思います。
winterboum

2020/08/13 22:58

正しい質問をしないと正しい答えは得られません
guest

0

ベストアンサー

デフォルトで定義されているdeviseのバリデーションメッセージを表示するヘルパーメソッドが不要になったのですが、これを無効にする方法

class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :rememberable, :validatable  #↑削除する。 end

【Rails】Railsとdeviseのデフォルトバリデーションを解除する方法

投稿2020/08/13 04:19

no1knows

総合スコア3365

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

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

moai891

2020/08/13 04:48 編集

ご回答ありがとうございます!! :validatableを削除し、ローカルサーバーの再起動をして確認したのですが、まだエラーメッセージが発生します・・・
no1knows

2020/08/13 05:03

消したいエラーは、deviseのエラーではないのでしょうか?
moai891

2020/08/13 14:15

ご回答ありがとうございます。消したいエラーとは、メッセージを出す場所を変えたいということでした。 new_profile.html.hamlで、以下の行を消したら理想通りになりました。 = render "devise/shared/error_messages", resource: @profile 質問の仕方が良くなかったと思いますので、改善していきたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問