gpt4 book ai didi

ruby-on-rails - Rails 3 Routing - 从命名空间中指定一个精确的 Controller

转载 作者:行者123 更新时间:2023-12-03 12:47:07 25 4
gpt4 key购买 nike

我遇到了一些我以前没有遇到过的路由命名空间问题。这实际上是我正在做的一些 gem 开发的一部分——但我已经修改了这个问题以适应更通用的 rails 情况。

基本上,我有一个命名空间路由,但我希望它指向一个通用(顶级) Controller 。

我的 Controller 是 PublishController ,它处理许多不同类型的模型的发布——它们都符合相同的接口(interface),但可以在不同的命名空间下。我的路线如下所示:

# config/routes.rb

namespace :manage do
resources :projects do
get 'publish' => 'publish#create'
get 'unpublish' => 'publish#destroy'
end
end

问题是这会创建以下路线:
manage_project_publish GET    /manage/projects/:project_id/publish(.:format)        {:controller=>"manage/publish", :action=>"create"}
manage_project_unpublish GET /manage/projects/:project_id/unpublish(.:format) {:controller=>"manage/publish", :action=>"destroy"}

这是我想要的路线,只是没有映射到正确的 Controller 。我已经尝试了所有我能想到的尝试并允许 Controller 不携带命名空间,但我很难过。

我知道我可以执行以下操作:
get 'manage/features/:feature_id/publish' => "publish#create", :as => "manage_project_publish"

产生:
manage_project_publish GET    /manage/projects/:project_id/publish(.:format)        {:controller=>"publish", :action=>"create"}

但理想情况下,我更喜欢使用嵌套声明(为了便于阅读)——如果可能的话;我开始认为不是。

最佳答案

如果我理解你的正确,你想要这个:

scope :manage do
resources :projects, :only => [] do
get 'publish' => 'publish#create'
get 'unpublish' => 'publish#destroy'
end
end
生产这些路线:
project_publish     GET    /projects/:project_id/publish(.:format)    {:action=>"create", :controller=>"publish"}
project_unpublish GET /projects/:project_id/unpublish(.:format) {:action=>"destroy", :controller=>"publish"}
我是否正确理解您的需求?如果是这样,这就是 Ryan 所解释的。

关于ruby-on-rails - Rails 3 Routing - 从命名空间中指定一个精确的 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5615684/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com