【问题标题】:How to have one resource in routes for namespace and root path altogether - Rails 4如何在命名空间和根路径的路由中完全拥有一个资源 - Rails 4
【发布时间】:2015-07-30 13:53:40
【问题描述】:

我正在命名空间“admin”中制作自定义管理面板。

我在该命名空间中有资源“课程”。

但我还想要一条通往不在该命名空间中的“课程”的路线:

例如:localhost:3000/admin/courseslocalhost:3000/courses

如果这需要不同的控制器也没关系。

我担心的是,如果我在同一条路线上同时拥有两种资源,它就不会真正干燥。

namespace admin do
   resources :courses
end

只是

resources :courses

有没有办法让一个资源在命名空间和没有命名空间之间共享,或者上面的例子是要走的路?

【问题讨论】:

  • 经过澄清,这可能与stackoverflow.com/questions/20492370/…重复
  • 您是说两条路线都应该转到相同的页面吗?还是管理员的操作不同?
  • 不同的页面,不同的控制器,可能是相同的操作,如果可能的话,我想要相同的路线,使用相同的代码行。下面的人回答了我:)
  • 我不认为它是重复的。如果是,它将与this one instead 重复,但问题略有不同。这里的作者正在寻找一种方法来重构以干燥事物。但是也许问题名称可以改写?
  • 那么合适的标题是什么?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4


【解决方案1】:

哦等等!也可以使用concerns

concern :shared_actions do
   resources :courses
   resources :something_else
end


namespace :admin do
   concerns :shared_actions
end
concerns :shared_actions # Will add it to the root namespace ^^

编辑:显然这是this guy 也试图做的:D

【讨论】:

  • 让我试试,然后跟进。
  • erm 语法似乎有问题,出现此错误,在我的路由文件中,我只有您在上面给我的内容,语法错误,意外的 tSYMBEG,期望关键字_do 或 '{' 或 '('命名空间:admin,关注点:shared_actions
  • 缺少冒号 ^^"
  • 嗯仍然无法正常工作这是我更改命名空间:admin,关注点:[:shared_actions] root 'welcome#index',关注点::shared_actions,我收到此错误,rake 中止! LocalJumpError:没有给出块(产量)
  • 谢谢你的范围工作,但你错过了一些我会编辑你的帖子并将其标记为工作!耶!
【解决方案2】:

我不太确定我明白你的意思,但是

namespace :something实际上是scope :something, module: :something, as: :something的简写

  • scope :something 将添加 /something/ 作为 URL 前缀
  • scope module: :something 将添加 /something 作为控制器前缀(控制器将在 controlelrs/something/the_controller.rb 下获取
  • scope as: :something 将添加 something 作为路径助手的前缀

现在在您的路线中同时拥有两者完全没问题

resources :courses
# Will generate "/courses/", "/courses/new", "/courses/1/edit", ...
# And will point to `controllers/courses_controller.rb`

namespace :admin do
  resources :courses
end
# Will generate "/admin/courses/", "/admin/courses/new", "/admin/courses/1/edit", ...
# And will point to `controllers/admin/courses_controller.rb`

这能回答你的问题吗?

【讨论】:

  • 我同意在路由中同时包含两者都很好,但是简单地指定范围和模块不是更干净吗?这正是 Rails 指南建议的做法(至少在我看来)。
  • 正如我所说的 jkeuhlen,我想你误解了我想要做的事情,我想要一个单独的管理控制器用于 admin/courses/ 路径和另一个控制器用于前端路径/courses。用你们给我的语法,它所做的只是指向我不想要的管理员/课程控制器。我只是问在 routes.rb 中是否有特殊的语法可以用一行代码为我生成课程/路径和管理员/课程/路径的路线,而不是两次编写资源。现在明白了?有可能吗?
  • 我相信这取决于您的个人品味。就我个人而言,当我阅读namespace :admin 时,我认为这比阅读scope :admin, module: :admin, as: :asmin 更有意义
  • @jkeuhlen 您建议的解决方案是创建courses_path 而不是admin_courses_path,并将始终将其带到管理控制器。相反,OP 需要使用单个资源映射到 admin 和没有作用域的控制器。
  • @CyrilDD 够公平的。只是好奇!我也是来学习的:)
猜你喜欢
  • 2012-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-25
  • 2017-11-09
  • 2013-08-08
  • 1970-01-01
  • 2023-03-16
相关资源
最近更新 更多