为什么我的RoR路由使用的控制器与我指定的控制器不同?

时间:2015-07-29 22:42:49

标签: ruby-on-rails

在我的_navigation partial中,我有以下链接:

<%= link_to 'Manage email notifications',  {:controller => :users, :action => 'show',  :id => current_user.id}  %>

当呈现页面时,我收到错误

No route matches {:action=>"show", :controller=>"high_voltage/users", :id=>1}

我很困惑。为什么选择high_voltages / users控制器?我实际上没有一个名为的控制器,授权包被另一个工程师放入我们的标准starter-kit rails应用程序中,我真的没有得到如何使用它。

我的路线文件是这样的:

 Rails.application.routes.draw do
▫
    devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
    devise_scope :user do
        get '/users/sign_out' => 'devise/sessions#destroy'
    end

    resources :users do
        post 'update'
    end

    root to: 'status#index'
end

我是否需要添加自定义路线才能到达我想去的地方?或者是否应该给予link_to一些其他参数?

TIA

2 个答案:

答案 0 :(得分:2)

如果记忆对我有用,那就是那种帮助者的奇怪行为:他们会尝试变聪明并且在前置控制器或它的父模块之前。

我记得一个项目,我通过在控制器名称前面添加一个斜杠来解决它,将其标记为&#34;根级别&#34;:

<%= link_to 'Manage email notifications',  { controller: "/users", action: 'show',  id: current_user.id} %>

当然,您可以使用路径助手。在你的情况下,我猜它会是:

<%= link_to 'Manage email notifications', user_path(current_user) %>

答案 1 :(得分:1)

您应该首选path helpers来明确说明控制器。

在应用程序的根目录中,运行rake routes以确定所需路线的名称。

在您的情况下,这可能是user,其路径为user_path

将代码调整为如下所示:

<%= link_to 'Manage email notifications', user_path(current_user) %>