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

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

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

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

Haml

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

Ruby

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

Q&A

2回答

3635閲覧

ログインでバリデーションをかけたい

yume0409

総合スコア45

Ruby on Rails 5

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

Haml

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

Ruby

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

Ruby on Rails

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

バリデーション

Validationとは特定の入力データが、求められた条件に当てまっているかをチェックするために使われます。

0グッド

1クリップ

投稿2020/02/07 11:14

ログイン機能のバリデーションについてです。
ログイン機能にはdeviseを使いました。
新規登録はdeviseを用いて自動的にバリデーションが追加していますが、ログイン機能には
自分で実装しないといけません。
ログインファイル

.new-field %h3 Log in = form_for(resource, as: resource_name, url: session_path(resource_name)) do |f| = render "devise/shared/error_messages", resource: resource .field = f.label :email %br/ = f.email_field :email, autofocus: true, autocomplete: "email", class: "text" .field = f.label :password %br/ = f.password_field :password, autocomplete: "current-password", class: "text" - if devise_mapping.rememberable? .field = f.check_box :remember_me = f.label :remember_me .actions = f.submit "Log in", class: "submit-button"

バリデーションかけた場合の処理

- if resource.errors.any? %h4 .error_explanation エラーです

バリデーションかけた場合の処理に関しては、この記述で新規登録はメッセージが出るので間違いないと思います。
バリデーションを表示する記述はログインファイルの4行目に記述しています。
この記述に関しては新規登録と同じメッセージを表示させたいので、既にバリデーションが出来ている新規登録のビューからコピペしました。
なので記述は間違いないと思います。
他にどこか記述しないといけないのでしょうか?
普通バリデーションかける時はコントローラーにif文で記述すると思いますが、ログイン機能の場合も必要でしょうか?
新規登録の時はコントローラーが必要ないと思いますのでログイン機能もいらないと思ったのですが・・・
sessions_controller.rb

def new @message = Message.new if @message.save redirect_to :root else render 'sessions/new' end

一応コントローラーも作成してみましたが、メソッドエラーもエラーメッセージも違うので、コントローラーが原因ではないような気がします。
躓いてしまいましたので、ご回答よろしくお願いします。

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

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

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

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

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

winterboum

2020/02/07 13:03

どんなvalidationをどこで掛けていますか? そのcodeも載せてください
guest

回答2

0

>チェックしたいのはログイン画面なのでアドレスと名前のどちらか1つでも間違っていれば、
>メッセージを出したいです。

それはvalidationというよりも 認証失敗 です。
Deviseを使っているなら、login周りはとりあえずはdeviseに任せることを薦めます。
Deviseが エラーメッセージを作成し、login画面に戻し、エラー表示してくれます。

sessions_controller.rb に

def new @message = Message.new if @message.save redirect_to :root else render 'sessions/new' end

は意味不明すぎます

投稿2020/02/10 06:17

編集2020/02/10 06:19
winterboum

総合スコア23567

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

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

yume0409

2020/02/10 07:11

回答ありがとうございます。 deviseに任せるとは、何もしなくていいと言うことでしょうか? 新規登録は何もしなくても表示出来ましたが、ログインは表示してくれません…
winterboum

2020/02/10 07:22

sessions controllerとか loginのviewを細工、自作しましたか? 何もしなければ出ます
guest

0

バリデーションはモデルに記載する必要があります。
レイルズガイド バリデーション

投稿2020/02/08 01:03

no1knows

総合スコア3365

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

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

winterboum

2020/02/08 07:56

モデルのcreate若しくはupdateでしたらそのとおりなのですが、「ログイン機能」ではのバリデーションではそういうことがあるとは思えません。 ですのでいわゆる 「モデルでの validatesをつかったバリデーションなど」ではなさそうだ、と感じました。 ので、 どんなvalidationをどこで掛けているか を知りたいと思った次第。
yume0409

2020/02/09 05:02

回答ありがとうございます。 モデルでバリデーションは掛けていません。 新規登録を参考にどこでバリデーションを掛けているか見たりしてましたが、上記以外でバリデーションを掛けている点はなかったので、最初に記載したコード以外はバリデーションは掛けていません。
winterboum

2020/02/09 05:48

??? どこにvalidationのcodeが書いてありますか? そもそも日本語で説明すると、どういうvalidationを掛けたいのですか?
yume0409

2020/02/09 07:14

上記の記述ですと、if文から始まっているコードです! 今は仮でエラーですと書いています。 ファイル名は「shared/_error.html.haml」です。
winterboum

2020/02/09 08:18

validation というのを誤解しているようです。 if で始まっているのは vlidationの結果を判定しています。 validationによってresorce.errorsを設定します。 それはどこに? 多分書いていないですね。 どういうことをチェックしたいのですか?
yume0409

2020/02/10 05:57

この「shared/_error.html.haml」の同じ記述で新規登録がバリデーションかかるので同じかな?と思いました。 バリデーションに関する記述は上記の質問欄以外は書いていません。 チェックしたいのはログイン画面なのでアドレスと名前のどちらか1つでも間違っていれば、 メッセージを出したいです。
winterboum

2020/02/10 06:57

>この「shared/_error.html.haml」の同じ記述で新規登録がバリデーションかかる ちがいます。 validationの結果を表示しているだけです。 validationは モデル Userに書かれています。Devise使ってるので、Deviseにかかれていて class Userには明示的には書かれて居ませんが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問