我有一个非常简单的Rails 3应用程序,其中包含由Devise和Notes模型运行的用户模型.现在,网址和路由如下所示:
# url /users/MEMBERNAME/notes/TITLE-OF-NOTE # routing resources :users do resources :notes end
但我希望网址看起来像这样,在这种情况下,路由怎么样?
# url /MEMBERNAME/TITLE-OF-NOTE
更新:
谢谢,现在我发现了一个新问题.在我的表格中我有这个代码:
<%= form_for([@user, @note]) do |f| %>
在我的控制器中,我重定向如下:
format.html { redirect_to([@user, @note], :notice => 'Note was successfully created.') }
在这两种情况下,当我使用@user时,@ note旧的URL仍然存在.您知道如何翻译表单和重定向以使用成员/标题结构吗?
提前致谢!
您可以在此处使用自定义路线:
get "/:user_id/:id", :to => "notes#show", :as => :short_user_note
希望这可以帮助!
更新:
要使用新创建的命名路由:
# => /USER_NAME/NOTE_NAME redirect_to short_user_note_path(@user, @note) # => /user/USER_NAME/note/NOTE_NAME redirect_to user_note_path(@user, @note) # OR redirect_to url_for([@user, @note]) # OR redirect_to [@user, @note]
因此,一般规则是如果将下面的active_record对象数组传递给#redirect_to,#url_for或#form_for方法,则会在内部调用#polymorphic_url方法,并生成标准的RESTful路由.
您可以使用Rails 3中的工作路由助手来执行路由行为,如下所示:
resources :users, :path => '' resources :users, :path => '', :only => [] do resources :notes, :path => '', :except => [:index] end
有关我如何达成此解决方案的详细信息,请参阅我的博客文章.