0

実際、これを正しく処理する方法がわかりません。admin/edit admin/show admin/news... などのパスでニュースを管理できる状況がありますが、ユーザーに news/show/1 というページを提供したいと考えています。 「admin」名前空間の外にニュースルートをバインドする必要があるという事実をどのように処理すればよいですか?

実際、私はこれしか持っていません:

namespace :admin do
  resources :news
end

私の考え:

namespace :admin do
  resources :news
end
resources :news

次に、次のようにします。

  • app/controllers/admin/news_controller.rb
  • app/controllers/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'

これは、ニュースにすべてのルートが必要なわけではなく、表示のみが必要だからです (インデックスも追加するかもしれませんが、現時点では必要ありません)。このようにして、私は Admin::NewsController では使用しないニュース コントローラーでリダイレクトのようなものを使用するため、2 つの異なるコントローラーですべてを処理できます。

この方法でルートを作成すると、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 に答える