假设我希望www.example.com/profile将用户重定向到他或她的个人资料页面。所以我想要做的是将“/ profile”与“users#show”匹配,但也让控制器知道当前用户是谁。有什么方法可以在路由文件中将params [:id]或params [:user_id]设置为session [:user_id]吗?我知道这可能不是实现我想要完成的目标的最佳方式。我只是想知道它是否可能,以及如果它是如何做到的。
答案 0 :(得分:4)
将'/ profile'路由到'users#show',然后将params值设置为会话值(如果尚未设置)。您不能在路径文件中设置它,但您可以在控制器中执行此操作。
路线:
match '/profile' => 'users#show
控制器:
class UserController < ApplicationController
def show
params[:id] ||= session[:user_id]
@user = User.find(params[:id)
end
end
您需要在控制器中进行一些额外的检查,以确保您的用户实际上是他们在会话中的人,我假设您正在使用某种身份验证库。
答案 1 :(得分:0)
如果你想完成这个,你根本不应该让它出现在你的路线中。
它应该保留:
match "/profile" to "users#profile"
因为您在会话中有信息,所以您只需要在控制器中获取它。
User.find(session[:user_id])
最好的方法是before_filter
检查用户是否已登录,这样您就不会因为会话为零而面临错误。