Возможно, вы захотите использовать что-то вроде 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
Приветствия!