会不会影响性能? 我在 application_helper.rb 里面放这些感觉别别扭扭的,请问最佳实践应该是什么
module ApplicationHelper
def user_info(user_id)
user = User.find_by_id(user_id)
unless user
return
end
user_info = {id:user.id, username:user.username}
end
end
非要返回 hash 的话也可以写得简单点
def user_info user_id
user = User.find_by_id(user_id)
{id:user.id, username:user.username} if user
end
user_info
的 argument 应该为 user object。
def user_info(user)
{
:id => user.id,
:username => user.username
} unless user.nil?
end
class User
def user_info
{
:id => self.id,
:username => self.username
}
end
end
session[:user_id] = 当前登陆的 User 的 id,你在 layout 里写一个<%= session[:user_id] %>
(如果在登陆情况下应该是返回登陆的这个用户的 id.)
User.find_by_id(session[:user_id]).user_name
搞一个 current_user 放在 application_controller.rb 里
def current_user
@current_user ||= begin
login_from_session || login_from_cookie
end
# @current_user ||= begin
# User.current = (login_from_session || login_from_cookie)
# end
end
# Store the given user id in the session.
def current_user=(new_user)
session[:user_id] = new_user ? new_user.id : nil
@current_user = new_user || nil
end
def login_from_session
self.current_user = User.where(:_id => session[:user_id]).first if session[:user_id]
end
def login_from_cookie
nil
end