Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 与属于命名空间Rails 4的资源关联的匹配_Ruby On Rails_Namespaces_Routes_Resources_Matching - Fatal编程技术网

Ruby on rails 与属于命名空间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

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

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动词。这更符合逻辑。此外,不能有相同的路由指向不同的操作