2015-01-27 61 views
0

我有一个使用Ruby on Rails 4.2.0的网站构建。现场版可在ALXS Design。在我的开发版本中,我有一个完美的手工登录系统。我试图将AJAX实现到边栏中的登录链接中,我已经在工作。但是,当我注销并单击登录链接时,表单会出现两次,有时会出现三次。如果我刷新浏览器窗口,表单只会出现一次,因为它应该是。Rails的AJAX登录没有设计或authlogic

任何想法?

在此先感谢。

sessions_controller.rb:

class SessionsController < ApplicationController 
     def create 
     if user = User.authenticate(params[:email], params[:password]) 
     session[:user_id] = user.id 
     respond_to do |format| 
      format.html { redirect_to root_path, :notice => "Logged in successfully" } 
      format.js 
     end  
     else 
     respond_to do |format| 
      format.html { flash.now[:alert] = "Invalid login/password combination" } 
      format.js 
     end 

     render :action => 'new' 
     end 
    end 

    def destroy 
     reset_session 
     respond_to do |format| 
     format.html { redirect_to root_path, :notice => "You have successfully logged out." } 
     format.js 
     end 
    end 
    end 

new.html.erb:

<div id="login-form"> 
     <h1>Login</h1> 

     <%= form_tag session_path do %> 
     <div class="field"> 
      <%= label_tag :email %><br /> 
      <%= text_field_tag :email %> 
     </div> 
     <div class="field"> 
      <%= label_tag :password %><br /> 
      <%= password_field_tag :password %> 
     </div> 
     <div class="actions"> 
      <%= submit_tag 'Login' %> 
     </div> 
     <% end %> 
    </div> 

new.js.erb

$("<%= escape_javascript render(file: 'sessions/new.html.erb') %>").insertAfter('.login-link'); 

    $('#login-form').hide().slideDown(); 
    $('.login-link').hide(); 

_navigation.html.erb

<div id="sidebar-wrapper"> 
     <ul class="sidebar-nav"> 
     <li class="toggle-menu"> 
      <a class="show-me menu-toggle" id="menu-toggle"> 
      <i class="fi-arrow-left" alt="Menu Toggle" style="text-align: right; width: 100%;"></i> 
      <span class="fi-arrow-right" alt="Menu Toggle"></span> 
      </a> 
     </li> 
     <li class="sidebar-brand"> 
      ALXS Design 
     </li> 
     <li> 
      <%= link_to root_path do %>Home<span class="fi-home" alt="Home"></span><% end %> 
     </li> 
     <li> 
      <%= link_to about_path do %>About<span class="foundicon-website" alt="About"></span><% end %> 
     </li> 
     <li> 
      <%= link_to projects_path do %>Projects<span class="fi-folder" alt="Projects"></span><% end %> 
     </li> 
     <% if logged_in? %> 
     <br /> 
     <li> 
      <%= link_to new_article_path do %>New Article<span class="fi-add-doc" alt="New Article"></span><% end %> 
     </li> 
     <li> 
      <%= link_to "Edit Password", edit_user_path(current_user) %> 
     </li> 
     <li> 
      <%= link_to "Logout", logout_path %> 
     </li> 
     <% else %> 
     <br /> 
     <li> 
      <%= link_to "Login", login_path(@user, :format => :js), :remote => true, class: 'login-link' %> 
     </li> 
     <li> 
      <%= link_to "Register", register_path %> 
     </li> 
     <% end %> 
     <li> 
      <div class="navigation-padding"></div> 
     </li> 
     <li class="hide-me"> 
      <a href="https://www.facebook.com/alxsdesign" target="_blank">Facebook<span class="fi fi-social-facebook"></span></a> 
     </li> 
     <li class="hide-me"> 
      <a href="https://github.com/tipsforthings" target="_blank">Github<span class="fi fi-social-github"></span></a> 
     </li> 
     <li class="hide-me"> 
      <a href="https://plus.google.com/u/0/116471654573031381012/posts/p/pub" target="_blank">Google+<span class="fi fi-social-google-plus"></span></a> 
     </li> 
     <li class="hide-me"> 
      <a href="https://twitter.com/alxsdesign" target="_blank">Twitter<span class="fi fi-social-twitter"></span></a> 
     </li> 

     </ul> 
    </div> 

destroy.js.erb

$('.login-link')[0].reset(); 

我想这也许是与在会话控制器的破坏作用,或destroy.js.erb文件。

回答

0

您的link_to正在获取会话控制器的新操作并将其添加到页面。您希望已经在页面上显示内容,然后使用Ajax提交表单。

+0

这样做的最佳方法是什么? – 2015-01-27 15:57:50