0

其实我不明白如何正确处理这个。我有一种情况,可以使用 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

然后我会有:

  • 应用程序/控制器/管理员/news_controller.rb
  • 应用程序/控制器/news_controller.rb

它是否正确?

4

2 回答 2

1

看到你的回答,我可以建议更简单的路线。

#routes.rb
namespace :admin do
  resources :news
end

resources :news, :only => [:show]

如果您也想index采取行动,请将最后一行重写为:

resources :news, :only => [:index, :show]

您将不需要news_pathand的助手news_url。你会得到他们已经为你建造的。

于 2012-11-13T03:14:28.073 回答
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 友好的 url)然后我以这种方式简单地将助手包含在我的控制器中:

class NewsController < ApplicationController
  include NewsHelper

一切都按我的意愿工作,看起来也很棒。

于 2012-11-13T02:38:32.013 回答