在我的_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
答案 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) %>