2013-04-01 2 views
2

Использование Rails 3.2. Я использую current_page?, чтобы определить текущую страницу, чтобы добавить active в соответствующую навигационную ссылку.Получить правильную текущую страницу? при рендеринге соответствия в маршрутах Rails

Когда Логин не удается, он возвращается в user_sessions#new, но current_page? не признает login_path больше, таким образом, не добавляя класс active по ссылке.

Я не могу использовать redirect_to, потому что хочу поймать ошибки в контроллере.

Как я могу получить current_page?, чтобы узнать user_sessions#new?

Ниже мой код:

# routes.rb 
# Following 2 lines ensure that the login url is maintained as "login" even there are errors after submitting the form 
match 'login' => 'user_sessions#new', :as => :login, :via => :get 
match 'login' => 'user_sessions#create', :as => :login, :via => :post 

# user_sessions_controller.rb 
class UserSessionsController < ApplicationController 
    def create 
    @user_session = UserSession.new(params[:user_session]) 
    if @user_session.save 
     flash[:success] = "Login successful!" 
     redirect_back_or_default profile_account_url 
    else 
     render 'new' 
    end 
    end 
end 

# _sub_nav.html.erb 
<ul class="nav nav-tabs"> 
    <li<%= " class=active" if current_page?(login_path) %>> 
    <a href="<%= login_path %>">Login</a> 
    </li> 
    <li<%= " class=active" if current_page?(signup_path) %>> 
    <a href="<%= signup_path %>">Signup</a> 
    </li> 
</ul> 

ответ

1

Я считаю изменение

<li<%= " class=active" if current_page?(login_path) %>>

в

<li<%= " class=active" if current_page?(:controller => 'user_session', :action => 'new') %>>

должен работать.

Смежные вопросы