其实我不明白如何正确处理这个问题。我有一种情况,可以使用admin / edit admin / show admin / news ...和类似路径管理新闻,但是我想给用户一个名为news / show / 1的页面,因为实际上我的新闻资源是在“ admin“命名空间,我应该如何处理我需要在”admin“命名空间之外绑定新闻路由的事实?
其实我只有这个:
namespace :admin do
resources :news
end
我的想法:
namespace :admin do
resources :news
end
resources :news
然后我会:
这是对的吗?
答案 0 :(得分:1)
看到你的回答,我可以建议更简单的路线。
#routes.rb
namespace :admin do
resources :news
end
resources :news, :only => [:show]
如果您也想要index
操作,请将最后一行重写为:
resources :news, :only => [:index, :show]
您不需要news_path
和news_url
的帮助者。你会得到它们已经为你建造。
答案 1 :(得分:0)
在路线上工作了一下之后,我明白了如何构建我想要的东西:
namespace :admin do
resources :news
end
get 'news/:id(.:format)' => 'news#show'
这是因为我不需要所有路线用于我的新闻,但只显示(我也可以添加索引,但目前不需要)。通过这种方式,我可以处理2个不同控制器上的所有内容,这样更好,因为我在新闻控制器上使用了重定向,而我在Admin :: NewsController上没有使用它。
我注意到另一个重要的事情,如果你以这种方式建立路线 news_path和news_url将不会被创建。因此,我不得不在news_helpers中以这种方式手动创建它们:
module NewsHelper
def news_url(record)
url_for controller: 'news', action: 'show', only_path: false, id: record.slug
end
def news_path(record)
url_for controller: 'news', action: 'show', only_path: true, id: record.slug
end
end
(slug用于seo友好的网址)然后我只是以这种方式将助手包含在我的控制器中:
class NewsController < ApplicationController
include NewsHelper
一切都按照我的意愿运作,看起来也很棒。