2016-04-29 8 views
0

ログインが失敗した場合、redirect_to:backは前のページを再ロードしますが、ドロップダウンフォームを表示し続けることはありません。railsのログインフォームがヘッダーから下にスライドし、ログインが失敗した場合、どうすればログインフォームを開いたままにできますか?

EDIT:

は "form_for guideはアヤックスを使用することを提案している。他の形態とは異なり、Ajaxを の対処

5.2、非同期ファイルアップロードフォームを作ることは、リモートでのform_for提供するのと同じくらい簡単ではありません:真。"

これは、remote:trueはRails組み込みのAjaxですか?

リモート:フォームに正しく追加するにはどうすればよいですか?

編集:

This question might be helpful for those trying to solve these issues.

セッションコントローラ

class SessionsController < ApplicationController 

    def new 
    end 

    def create 
    user = User.find_by(email: params[:session][:email].downcase) 
    if user && user.authenticate(params[:session][:password]) 
     if user.activated? 
     log_in user 
     params[:session][:remember_me] == '1' ? remember(user) : forget(user) 
     redirect_back_or user 
     else 
     message = "Account not activated. " 
     message += "Check your email for the activation link." 
     flash[:warning] = message 
     redirect_to root_url 
     end 
    else 
     flash.now[:danger] = 'Invalid email/password combination'   
     redirect_to :back 
    end 
    end 

    def destroy 
    log_out if logged_in? 
    redirect_to root_url 
    end 
end 

のjQuery

$(document).on('page:change', function() { 
    $('.sessions').hide(); 
    $('li.close-header').hide(); 
    $('li.signin').on('click', function() { 
    $('li.signin').fadeOut(100); 
    $('.sessions').slideDown(500); 
    $('li.close-header').fadeIn(100); 
    $('li.close-header').on('click', function() { 
    $('.sessions').slideUp(500); 
    $('li.close-header').fadeOut(100); 
    $('li.signin').fadeIn(100); 
    }); 
    }); 
}); 

フォーム

<div class="sessions"> 
<h1>Sign Up</h1> 
<div class="row"> 
<div class="col-md-3"> 
    <%= form_for(:session, url: login_path) do |f| %> 

    <%= f.label :email %> 
    <%= f.email_field :email, class: 'form-control' %> 

    <%= f.label :password %> 
    <%= link_to "(forgot password)", new_password_reset_path %> 
    <%= f.password_field :password, class: 'form-control' %> 

    <%= f.label :remember_me, class: "checkbox inline" do %> 
     <%= f.check_box :remember_me %> 
     <span>Remember me on this computer</span> 
    <% end %> 

    <%= f.submit "Log in", class: "btn btn-primary sessions" %> 
    <% end %> 

    <p>New user? <%= link_to "Sign up now!", signup_path %> </p>   
</div> 

+0

コントローラからのテキストまたはjsをレンダリングして、ログインハンドルにエラーを表示させます。エラーの場合は、このredirect_to root_urlまたはredirect_to:backを実行しないでください。 –

+0

私のフォームに 'remote:true'が必要ですか?私はそれを挿入しようとしましたが、成功しませんでした。 –

+0

ええ、リモートの真を許可する –

答えて

0

リモート追加:真の姿にAJAXでそれを処理してcreate.js.erbファイルを作成して、ビュー内のエラーをレンダリングします。また、サーバー側の検証に合わせてクライアント側の検証を追加することも検討してください。

関連する問題