Отображать другой текст при входе в Rails - PullRequest
2 голосов
/ 26 октября 2011

Я следил, чтобы Railscast # 270 нашел Rails Cast # 270 о реализации аутентификации в Rails 3.1.Я хотел бы, чтобы в моих шаблонах отображались различные ссылки, если пользователь вошел в систему. Это должно выглядеть примерно так.

If user logged in
  Display link to Profile
  Display logout
If user logged out
 Display link to register
 Display link to login

Я думаю, что смогу найти ссылку наразличные места из theRailsTutorial, но я застрял на том, как определить, вошел ли пользователь в систему или нет.

Используя учебник по rails, я нашел этот фрагмент

 <% if signed_in? %>
     <li><%= link_to "Profile", current_user %> sfsdfsdf</li>
 <% end %>

, который не работает, когда я добавляю в помощник сессий следующее:

    def signed_in?
      !@current_user.nil?  
end

Как бы высделать эту работу?

Ответы [ 2 ]

6 голосов
/ 26 октября 2011

Используйте current_user.

, так что просто

 <% if current_user %>
     <li><%= link_to "Profile", current_user %> sfsdfsdf</li>
 <% end %>

btw в HAML это будет просто

 -if current_user
   %li= 
     link_to "Profile", current_user, sfsdfsdf

(концы подразумеваются - оба дляТег HTML <li> (т. Е. </li>) И для оператора ruby ​​if!)
Для тех, кто не использует HAML, это должно ухудшить ваш аппетит :)

Сам по себе current_user использует @current_user и этоустанавливается в вашем контроллере приложения, как в:

  helper_method :current_user

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end
1 голос
/ 26 октября 2011

Похоже, нужно настроить метод current_user.Вот как Райан Бейтс делает это в Railscast 270:

class ApplicationController < ActionController::Base
  protect_from_forgery

  private

  def current_user
    @current_user ||= User.find(session[:user_id]) if session[:user_id]
  end

  # don't forget this line too 
  helper_method :current_user
end

Убедитесь, что вы получили это в application_controller.rb.Больше не нужно использовать if signed_in, хотя оно все равно должно работать, если вы предпочитаете продолжать

...