【问题标题】:Routing / in Rails路由/在 Rails 中
【发布时间】:2010-10-15 23:27:26
【问题描述】:

我正在编写一个带有一个主控制器的简单 Rails 应用程序,我想将 /(:action(:id)) 映射到这个控制器(基本上删除开头的控制器前缀),但仍然有我通过使用 map.resources 获得的路径助手.

我尝试了map.root :controller => 'notes',但出现错误:

#<:base:0x102038b50> 的未定义方法 `note_path'

我在哪里使用link_to_unless_current 函数。

编辑:这是 index.html.erb 中给出错误的代码。

<% for note in category.notes %>
    <h3><%= link_to_unless_current h(numbered_title note), note %></h3>
<% end %>

【问题讨论】:

  • 需要更多信息。就像使用 link_to_unless_current 在页面中发布实际代码一样,当你去那里时,去根工作吗?另外我认为您需要一个默认操作,我认为您不能说只是映射到控制器;它怎么知道要画什么?
  • map.root :controller =&gt; 'notes', :action =&gt; 'index' 也不起作用。
  • 此外,我不仅想映射/,还想映射/:id/:id/edit等。
  • 好吧,#note_path 将被定义,如果你有一个命名的笔记路由......你的 route.rb 文件中真的有 map.resources :notes 吗?你能告诉我们你的完整 routes.rb 吗?
  • 我刚刚意识到您正在使用map,这是定义路由的旧方法。你在 Rails 2.3 上吗?

标签: ruby-on-rails routing


【解决方案1】:

更新:我不知道我是如何提出这个问题的,但作者只是指出这是 3 岁,我完全错过了。如果有人在rails 3中需要这种行为,我会留下这个答案。在rails 2中它是无效的......

Route root 不适用于整个控制器,因为它必须指向特定的操作。

resources 的第一个参数将用于确定路径(通常为/notes),同时创建像notes_path 这样的助手。您要做的是将其设置为'/',但还要添加:as 选项以提供正确的助手名称。所以最后它应该是这样的:

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

同样需要注意的是,如果你想使用任何其他资源,你应该把它们放在notes路由上面。否则,rails 会将资源名称识别为注释动作显示的id

例子:

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

转到 /comments 将尝试查找 ID 为“cmets”的便笺。

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

打开/comments 将转到comments_controller#index

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 2011-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多