Руби на рельсах глобальной переменной? - PullRequest
4 голосов
/ 23 апреля 2011

Я пытаюсь установить текущего пользователя в переменную, чтобы на каждой странице отображалось «Logged as Joe». Не совсем уверен, с чего начать ...

Какие-нибудь быстрые советы? В частности, в каком файле должно быть что-то подобное ...

Мой текущий пользователь может быть определен как (я думаю): User.find_by_id(session[:user_id])

TY:)

Ответы [ 3 ]

9 голосов
/ 23 апреля 2011

Возможно, вы захотите использовать что-то вроде Authlogic или Devise, чтобы справиться с этим, а не использовать собственную систему аутентификации, особенно когда вы не очень хорошо знакомы с шаблонами проектирования, общими для приложений Rails.

При этомесли вы хотите сделать то, что задаете в этом вопросе, вам, вероятно, следует определить метод в вашем ApplicationController следующим образом:

def current_user
  @current_user ||= User.limit(1).where('id = ?', session[:user_id])
end

Вы наследуете от ApplicationController на всех ваших обычных контроллерах, поэтому они всеиметь доступ к методу current_user.Также вам может потребоваться доступ к методу в качестве помощника в ваших представлениях.Rails также позаботится о вас (также в вашем ApplicationController):

helper_method :current_user
def current_user ...

Примечание: если вы используете методы find_by_x, они вызовут ошибку ActiveRecord :: RecordNotFound, если ничего не будет возвращено.Вы, вероятно, не хотите этого, но вы можете захотеть что-то, чтобы не-пользователи могли получить доступ только к пользовательским ресурсам, и опять же, Rails предлагает вам:

class ApplicationController < ActionController::Base
  protect_from_forgery
  helper_method :current_user
  before_filter :require_user

private
  def current_user
    @current_user ||= User.limit(1).where('id = ?', session[:user_id])
  end

  def require_user
    unless current_user
      flash[:notice] = "You must be logged in to access this page"
      redirect_to new_session_url
      return false
    end
  end
end

Приветствия!

0 голосов
/ 23 апреля 2011

Именно по этой причине все ваши контроллеры наследуются от Application Controller. Создайте метод в вашем контроллере приложений, который возвращает все, что вам нужно, а затем вы можете получить к нему доступ в любом из ваших других контроллеров.

0 голосов
/ 23 апреля 2011

Он принадлежит вашим контроллерам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...