使用URL中的连字符Map.connect

时间:2009-09-11 03:49:34

标签: ruby-on-rails

我希望http://localhost:3000/note-1828映射到控制器操作。我试过这个:

  map.connect "note-:id",
    :controller => "annotations",
    :action => "show",
    :requirements => { :id => /\d+/ }

但它似乎不起作用(No route matches "/note-1828" with {:method=>:get})。我该怎么做呢?

2 个答案:

答案 0 :(得分:2)

路由变量(如:id)只能在路径分隔符之间发生,在本例中为斜杠。

您最好的选择是恢复路线,改为使用/notes/:id

但是,您可能正在重写现有网站并希望保留您的网址。在这种情况下,我会使用.htaccessmod_rewrite重新路由:

RewriteRule note-(\d+) /notes/$1 [R=301]

.htaccess显然必须在/public目录中)

答案 1 :(得分:2)

同意列昂尼德。如果你只想制作一些“漂亮”的网址,你可以将to_param方法应用到笔记模型中。因此:

def to_param
  "#{id}-notes"
end

添加RESTful路线:

map.resources :annotations, :as => "notes"

会给你一些类似的东西:

http://yourdomain.com/annotations/1828-notes

如果您不想要“备注”部分,您可以将路线映射到类似

的路线
map.connect "/:id", :controller=>"annotations", :action=>"show"

并获得

http://yourdomain.com/1828-notes