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

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

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

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

Ruby on Rails

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

Q&A

解決済

1回答

5457閲覧

Railsでフォームに入力した値を取り出す方法を教えたください

koume

総合スコア458

Ruby

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

Ruby on Rails

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

0グッド

0クリップ

投稿2017/12/02 10:14

編集2017/12/02 12:03

Rails5.1.3でWebアプリケーション制作の勉強をしています。ログイン機能を作っています。
ログインフォームには、email, password, nickname を入力するようにしています。
emailとpasswordのみでログインはできていました。ログインフォームにnickname入力欄を
新規に作りログインしようとしても上手く認識してくれず困っているので教えていただけないでしょうか?。
@form.nicknameで値を取得するつもりでしたが取得できていないのが原因だと思いますが、
取り出し方がわかりません。
コードは以下のようになっています。

sessions_controller.rb class Customer::SessionsController < Customer::Base skip_before_action :authorize def new if current_customer redirect_to :customer_root else @form = Customer::LoginForm.new render action: 'new' end end def create @form = Customer::LoginForm.new(customer_login) if @form.email.present? customer = Customer.find_by(email_for_index: @form.email.downcase) end if @form.nickname.present? nickname = Customer.find_by(nickname: @form.nickname)-----この値がblankになってしまいます。 end if nickname.present? -------------------------------------------------------ここを認識してくれません。 if Customer::Authenticator.new(customer).authenticate(@form.password) if @form.remember_me? cookies.permanent.signed[:customer_id] = customer.id else cookies.delete(:customer_id) session[:customer_id] = customer.id end flash.notice = 'ログインしました。' redirect_to :customer_root end else flash.now.alert = 'メールアドレスまたはパスワードもしくはニックネームが正しくありません。' render action: 'new' end end
authenticator.rb class Customer::Authenticator def initialize(customer) @customer = customer end def authenticate(raw_password) @customer && @customer.hashed_password && BCrypt::Password.new(@customer.hashed_password) == raw_password end end
new.html.erb <% @title = 'ログイン' %> <div id="login-form"> <h1><%= @title %></h1> <%= form_for @form, url: :customer_session do |f| %> <div> <%= f.label :email, 'メールアドレス' %> <%= f.text_field :email %> </div> <div> <%= f.label :nickname, 'ニックネーム' %> <%= f.text_field :nickname %> </div> <div> <%= f.label :password, 'パスワード' %> <%= f.password_field :password %> </div> <div> <%= f.check_box :remember_me %> <%= f.label :remember_me, '次回から自動でログインする' %> </div> <div> <%= f.submit 'ログイン' %> </div> <% end %> </div>
login_form.rb class Customer::LoginForm include ActiveModel::Model attr_accessor :email, :password, :nickname, :remember_me def remember_me? remember_me == '1' end end

フォームにはemail, password, nicknameの入力欄が表示されています。
入力後にログインをクリックすると「'メールアドレスまたはパスワードもしくはニックネームが正しくありません。'」が
表示されログインできません。どこの部分が悪いのかわからないので困っています。

どなたか教えていただけないでしょうか?宜しくお願いします。

追記
nickname = Customer.find_by(nickname: @form.nickname)の@form.nicknameでフォームに入力した値を
取り出せていないのが原因みたいです。フォームに入力されたnicknameの値をどう取り込めばいいのでしょうか?

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

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

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

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

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

guest

回答1

0

自己解決

privateメソッドに :niknameを記述していませんでした。追記して解決です。
private
def customer_login
params.require(:customer_login_form).permit(
:email, :password, :nickname)
end

投稿2017/12/02 12:19

koume

総合スコア458

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問