ログインが失敗した場合、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>
コントローラからのテキストまたはjsをレンダリングして、ログインハンドルにエラーを表示させます。エラーの場合は、このredirect_to root_urlまたはredirect_to:backを実行しないでください。 –
私のフォームに 'remote:true'が必要ですか?私はそれを挿入しようとしましたが、成功しませんでした。 –
ええ、リモートの真を許可する –