form_forについてです。
#解決したい内容
最終的にやりたい内容はログイン機能でメールアドレスかパスワードが間違っていたらエラーメッセージを出すようにしたいです。
ログインはdeviseを使用しました。
今はエラーメッセージより正常にログインのビューを表示させたいです。
コントローラーをカスタマイズすることは出来ました。
sessions/new.html.haml
.new %h4 ログイン = form_for(@user) do |f| - if @error_message .error = @error_message .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
sessions.controller.rb
def new @user = User.find_by(email: params[:email], password: params[:password]) if @user redirect_to :root else @error_message = "エラー" @email = params[:email] @password = params[:password] render "devise/sessions/new" end end
コントローラーの2行目をfind_byにすると下記のエラーメッセージが出ます。
エラー個所はビューの3行目のform_forなのでその引数に当たる、@userがおかしいんだと思います。
ArgumentError in Users::Sessions#new First argument in form cannot contain nil or be empty
なのでコントローラーの2行目をnewに変えてみました。
def new @user = User.new if @user redirect_to :root else @error_message = "エラー" @email = params[:email] @password = params[:password] render "devise/sessions/new" end end
そしたらエラーはなくなるのですが、恐らく、コントローラーの4行目が動いてると思いますが、ルートにリダイレクトされます。
ログイン押しても瞬時にルートに遷移されます。
これをredirect_to "/users/sign_in"に変更すると
このページは動作していません localhost でリダイレクトが繰り返し行われました。
となります。
これにずっと悩んでいるのでご教授いただけると幸いです。
よろしくお願いします。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。