ruby-on-rails - 与属于命名空间 Rails 4 的资源相关联的匹配

标签 ruby-on-rails namespaces routes resources matching

在我的 rails 4 应用程序中,我需要创建一个允许管理员发布文章的 POST 路由。我创建了一个包含多个资源的 admin 命名空间,我希望它能够将发布/取消发布操作与作为 admin 命名空间一部分的文章资源相匹配。但是,操作映射到 admin 命名空间并跳过文章资源。

namespace :admin do
   resources :articles
   post 'article/:id' => 'articles#publish'
   post 'article/:id' => 'articles#unpublish'

   resources :ads
end

例如,我得到
admin_path   POST    /admin/articles/:id(.:format)   admin/articles#publish
             POST    /admin/articles/:id(.:format)   admin/articles#unpublish

而不是想要的
admin_articles_path  POST    /admin/articles/:id(.:format)   admin/articles#publish
                     POST    /admin/articles/:id(.:format)   admin/articles#unpublish

我很感激任何建议。

最佳答案

首先我要明确的是你不能admin_articles_path作为 'articles#publish' 的路由辅助方法, 因为它已经被 'articles#index 消耗掉了.

admin_articles GET      /admin/articles(.:format)          admin/articles#index

将您的路线更新为:
namespace :admin do
   resources :articles
   post 'article/:id' => 'articles#publish', :as => "article_publish"
   delete 'article/:id' => 'articles#unpublish', :as => "article_unpublish"

   resources :ads
end

生成的 View :
admin_article_publish   POST     /admin/article/:id(.:format)       admin/articles#publish
admin_article_unpublish DELETE   /admin/article/:id(.:format)       admin/articles#unpublish

我正在使用 unpublishdelete http 动词。这更合乎逻辑。此外,您不能使用相同的路由来指向不同的操作。

关于ruby-on-rails - 与属于命名空间 Rails 4 的资源相关联的匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25029284/

相关文章:

ruby-on-rails - 使用 Rails 搜索 MongoDB

php - 保存外部 xml 文件的副本,而不使用 xml 命名空间

python - 在 Python 模块中隐藏中间计算

routes - 如何在 rails 4 中重新加载路由/config/routes/*?

ruby-on-rails - 简单表单集合 - 下拉菜单

ruby-on-rails - 无法迁移数据库。 ActiveAdmin 和 Rails 4.0.2

ruby-on-rails - Rails 5 中的弃用警告

c# - 如何从 XAML 中的 CLR 命名空间映射类型,而不是声明它的程序集?

python - 如何在 python 中的 webob 中的 HttpRedirect 或 HttpFound 中发送 post 变量?

c# - 如何在 ASP.NET MVC 中为我的管理部分设置路由?