我有一个问题我在Rails中真的很新,我不确定什么是正确的。
def current_user
return unless params[:user_id]
@current_user ||= User.find(params[:user_id])
end
所以我得到了当前的用户。 Rails检查params的user_id。
但如果我喜欢这条路线/users/:id
怎么办?
然后params是id而不是user_id这就是为什么它有时无法正确设置时区。
如何处理这样的事情?
def set_time_zone(&block)
if params[:user]
Time.use_zone(params[:user][:time_zone], &block)
else
time_zone = current_user.try(:time_zone) || 'UTC'
Time.use_zone(time_zone, &block)
end
end
答案 0 :(得分:1)
您可以覆盖current_user
内的UsersController
,以便查看id
参数而不是user_id
。或者你可以使用现有的方法,如下所示:
@current_user ||= User.find_by_id(params[:user_id]) || User.find_by_id(params[:id])
我要提醒你,不要认为params[:id]
是理所当然的。如果我的用户ID为5,则无法阻止我访问/users/6
!
答案 1 :(得分:1)
在迄今为止我见过的所有rails应用程序current_user
代表当前登录的用户。
当前登录用户的ID绝不能通过params
发送,而是通过session
发送(因为params可以被所有人操纵)。
然后你可以
def current_user
@current_user ||= begin
User.find(session[:user_id]) if session[:user_id]
end
end
在您的应用程序控制器中。