Ruby on rails 与属于命名空间Rails 4的资源关联的匹配
在我的rails 4应用程序中,我需要创建一个允许管理员发布文章的发布路径。我创建了一个具有多个资源的管理命名空间,我希望它将发布/取消发布操作与作为管理命名空间一部分的文章资源相匹配。但是,这些操作映射到管理名称空间并跳过项目资源Ruby on rails 与属于命名空间Rails 4的资源关联的匹配,ruby-on-rails,namespaces,routes,resources,matching,Ruby On Rails,Namespaces,Routes,Resources,Matching,在我的rails 4应用程序中,我需要创建一个允许管理员发布文章的发布路径。我创建了一个具有多个资源的管理命名空间,我希望它将发布/取消发布操作与作为管理命名空间一部分的文章资源相匹配。但是,这些操作映射到管理名称空间并跳过项目资源 namespace :admin do resources :articles post 'article/:id' => 'articles#publish' post 'article/:id' => 'articles#unpub
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
谢谢你的建议
namespace :admin do
resources :articles
post 'article/:id' => 'articles#publish'
delete 'article/:id' => 'articles#unpublish'
resources :ads
end
对不起,但我不认为你指的是两篇同一路径的帖子,意思不同。我想第二个你指的是上面提到的“删除”。但无论如何,让我们开门见山
这里发生的事情是Rails正在创建一个名为“admin_path”的路径,因为您没有指定所需路径名称的后缀。例如,您可以选择:
post 'article/:id' => 'articles#publish', as: 'article_publish'
现在它将生成“管理文章发布路径”
当您不指定后缀(或“as”散列)时,它只生成前缀:admin\u path
如果您在控制台中键入“rake routes”时注意,您将看到路径管理文章路径以及管理文章路径已经被占用;它们都是Rails默认生成的,使用Restful名称约定。所以,不,不要把它去掉。不要走已经走过的路,那在将来可能会让人困惑。选择一个不同的名字。嗯,我认为发布管理文章路径更好。它遵循Rails的惯例,更加宁静。为此,您可以:
namespace :admin do
resources :articles do
post 'publish', on: :member
end
end
这将产生:
publish_admin_article POST /admin/articles/:id/publish(.:format) admin/articles#publish
取消发布的理由也是一样。首先,我想澄清的是,不能将
管理文章路径
作为'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
生成的视图:
admin_article_publish POST /admin/article/:id(.:format) admin/articles#publish
admin_article_unpublish DELETE /admin/article/:id(.:format) admin/articles#unpublish
我正在使用unpublish
和delete
http动词。这更符合逻辑。此外,不能有相同的路由指向不同的操作