当前位置:  开发笔记 > 前端 > 正文

在url中没有控制器名称的嵌套资源

如何解决《在url中没有控制器名称的嵌套资源》经验,为你挑选了2个好方法。

我有一个非常简单的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仍然存在.您知道如何翻译表单和重定向以使用成员/标题结构吗?

提前致谢!



1> Aaron Qian..:

您可以在此处使用自定义路线:

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路由.



2> Jason Weathe..:

您可以使用Rails 3中的工作路由助手来执行路由行为,如下所示:

resources :users, :path => ''
resources :users, :path => '', :only => [] do
  resources :notes, :path => '', :except => [:index]
end

有关我如何达成此解决方案的详细信息,请参阅我的博客文章.

推荐阅读
手机用户2402851335
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有