我希望http://localhost:3000/note-1828
映射到控制器操作。我试过这个:
map.connect "note-:id",
:controller => "annotations",
:action => "show",
:requirements => { :id => /\d+/ }
但它似乎不起作用(No route matches "/note-1828" with {:method=>:get}
)。我该怎么做呢?
答案 0 :(得分:2)
路由变量(如:id
)只能在路径分隔符之间发生,在本例中为斜杠。
您最好的选择是恢复路线,改为使用/notes/:id
。
但是,您可能正在重写现有网站并希望保留您的网址。在这种情况下,我会使用.htaccess
和mod_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