2015-12-31 54 views
0

我創建了一個下拉式登錄表單,因此當登錄成功時,用戶將被重定向到根路徑,否則下拉表單將更新錯誤消息而不重新加載整個頁面。爲了做到這一點,我用AJAX來顯示錯誤信息,我的問題是,當登錄成功時,它不會重定向到根路徑。我只想在控制器方法內的其他情況下使用AJAX。提前致謝。 這是我到目前爲止的代碼:在Rails的特定情況下使用ajax

// Controller 
def create 
    user = User.find_by(email: params[:email]) 
    if user && user.authenticate(params[:password]) 
    session[:user_id] = user.id 
    redirect_to root_path 
    else 
    respond_to do |format| 
     format.html { redirect_to root_path} 
     format.js 
    end 
    end 
end 

//View 
<div class="dropdown-menu login"> 
<%= form_tag sessions_path, remote: true do%> 
. 
. 
. 

//Jquery Script 
    $(".login").prepend("<p class='loginerror'>Wrong user/password</p>") 

回答

1

如果您的請求是AJAX(遠程:真),你的反應會是JS。

因此,你需要用JS重定向:

render js: "window.location.href = '#{my_named_route_path}'" 

控制器:

def create 
    user = User.find_by(email: params[:email]) 

    if user && user.authenticate(params[:password]) 
    session[:user_id] = user.id 
    render js: "window.location.href = '#{my_named_route_path}'" 
    end 
end 

,這會使得create.js如果條件是假的,你不需要redirect_to,如果你的要求是阿賈克斯。

+0

謝謝!!有效。 – user2382683

0

這是因爲在這兩種情況下JS請求正在發送。試試這個

// Controller 
def create 
    user = User.find_by(email: params[:email]) 
    respond_to do |format| 
    if user && user.authenticate(params[:password]) 
    session[:user_id] = user.id 
    format.html { redirect_to root_path} 
    format.js 
    else 
    format.html { redirect_to root_path} 
    format.js { render js: "window.location.href=#{root_url}" } 
    end 
end