Ruby on rails路径名在控制器中被视为未初始化的常量

时间:2013-10-31 18:27:07

标签: ruby-on-rails path routing

在我的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?

1 个答案:

答案 0 :(得分:2)

执行rake routes并检查可用的路由名称及其相应的路径助手。检查路径名是否实际为Xhome_path。如果不存在路径名,则执行

redirect_to '/Xhome', :notice => "Logged in successfully"