路由 / 在Rails中

3
我正在编写一个简单的Rails应用程序,其中包含一个主控制器,我想将/(:action(:id))映射到该控制器(基本上删除开头的控制器前缀),但仍希望通过使用map.resources获得路径助手。
我尝试了map.root :controller => 'notes',但是出现了错误:

undefined method `note_path' for #<ActionView::Base:0x102038b50>

这里我在视图中使用了link_to_unless_current函数。
编辑:以下是导致错误的index.html.erb代码。
<% for note in category.notes %>
    <h3><%= link_to_unless_current h(numbered_title note), note %></h3>
<% end %>

map.root :controller => 'notes', :action => 'index' 也不起作用。 - user113397
好的,如果您在notes上有一个命名路由,那么#note_path将被定义...您的route.rb文件中是否实际上有map.resources:notes?您能否向我们展示您完整的routes.rb文件? - severin
我刚刚意识到你正在使用map来定义路由,这是旧的方式。你在使用Rails 2.3吗? - Lucas
@Lucas 这个问题已经三年了... - user113397
哦 O_o 我一定是在睡觉 -_- - Lucas
显示剩余2条评论
1个回答

0

更新:我不知道我是怎么来到这个问题的,但作者刚指出这已经是3年前的问题了,我完全错过了。如果有人需要在rails 3中使用这种行为,我将保留此答案。在rails 2中,它是无效的...

路由root不能使用整个控制器,因为它必须指向特定的操作。

resources的第一个参数将用于确定路径(通常为/notes),同时创建像notes_path这样的帮助程序。你想做的是将其设置为'/',但也要添加:as选项以给出适当的帮助程序名称。所以最后它应该看起来像:

resources '/', controller: :notes, as: :notes

还有一件非常重要的事情需要注意,如果您想使用任何其他资源,您应该将它们放在notes路由之上。否则,Rails将会将资源名称识别为notes操作展示的id

例如:

resources '/', controller: :notes, as: :notes
resources :comments

访问 /comments 将尝试查找 ID 为“comments”的注释。

resources :comments
resources '/', controller: :notes, as: :notes

打开/comments会进入comments_controller#index


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接