在我的Ruby on Rails应用程序中,当用户的身份验证成功时,我想根据他们所属的帐户将他/她发送到特定的主页。
我尝试在Sessions控制器中添加一个'if'子句,如下所示:
def create
if user = User.authenticate(params[:login], params[:password])
session[:user_id] = user.id
if user.account.name == "X"
redirect_to Xhome_path, :notice => "Logged in successfully"
else
redirect_to home_path, :notice => "Logged in successfully"
end
else
flash.now[:alert] = "Invalid login/password combination"
render :action => 'new'
end
end
在routes.rb中复制已存在的以下行:
match '/home' => "users#home", :as => "home"
我添加了这个:
match '/Xhome' => "users#Xhome", :as => "Xhome"
这不起作用,并给出以下结果:
如果有user.account.name'X'的用户登录,则浏览器会显示以下错误消息:
SessionsController中的NameError #create
未初始化的常量SessionsController :: Xhome_path
但是,一旦对此用户进行身份验证,输入mydomain.com/Xhome URL就可以正常运行并带来预期的Xhome视图,这似乎证明路由端没有问题。
您知道这个NameError问题可以来自哪里吗?为什么我不能像使用home_path一样使用Xhome_path?
答案 0 :(得分:2)
执行rake routes
并检查可用的路由名称及其相应的路径助手。检查路径名是否实际为Xhome_path
。如果不存在路径名,则执行
redirect_to '/Xhome', :notice => "Logged in successfully"