7

名前空間「ショップ」があります。その名前空間には、リソース「ニュース」があります。

namespace :shop do
  resources :news  
end

私が今必要としているのは、私の「ニュース」ルートが新しいパラメーターを取得できることです:

/shop/nike (landing page -> goes to "news#index", :identifier => "nike")
/shop/adidas (landing page -> goes to "news#index", :identifier => "adidas")
/shop/nike/news
/shop/adidas/news

ショップを取得してニュースをフィルタリングできるように。

次のようなルートが必要です:

/shop/:identfier/:controller/:action/:id

多くのバリエーションをテストしましたが、実行できません。

誰でも私にヒントを得ることができますか?ありがとう。

4

2 に答える 2

12

を使用できますscope

scope "/shops/:identifier", :as => "shop" do
  resources :news
end

以下のルートを取得します。

$ rake routes
shop_news_index GET    /shops/:identifier/news(.:format)          news#index
                POST   /shops/:identifier/news(.:format)          news#create
  new_shop_news GET    /shops/:identifier/news/new(.:format)      news#new
 edit_shop_news GET    /shops/:identifier/news/:id/edit(.:format) news#edit
      shop_news GET    /shops/:identifier/news/:id(.:format)      news#show
                PUT    /shops/:identifier/news/:id(.:format)      news#update
                DELETE /shops/:identifier/news/:id(.:format)      news#destroy

http://guides.rubyonrails.org/routing.html#controller-namespaces-and-routing

于 2012-11-24T06:23:05.583 に答える
3

データベースに nike、adidas などがある場合、最も簡単なオプションは match を使用することです。

namespace :shop
  match "/:shop_name" => "news#index"
  match "/:shop_name/news" => "news#news"
end

しかし、ショップはあなたにとってリソースであるべきだと私には思えます。ShopsController を作成するだけです (対応するモデルは必要ありません。コントローラーだけです)。それからあなたはすることができます

resources :shops, :path => "/shop"
  resources :news
end

これで、ニュース インデックス ページ (/shop/adidas) に次のようにアクセスできます。

shop_path("adidas")

NewsController では:shop_id、ショップの名前にアクセスするために使用します (はい、_id ですが、文字列にすることができます)。設定に応じて、ニュースを単一のリソースにしたり、ニュース メソッドを収集メソッドにしたりすることができます。

また、ニュース リソースの名前を変更するだけでよろしいですか?

resources :news, :path => "/shop" do
  get "news"
end

また、コントローラーの名前とコントローラーの数がモデルと一致している必要がないことにも注意してください。たとえば、NewsController のない News モデルと、Shop モデルのない ShopsController を持つことができます。理にかなっている場合は、Shop モデルをデータベースに追加することを検討することもできます。これがあなたの設定ではない場合は、例を単純化しすぎている可能性があるため、設定のより完全な説明を提供する必要があります。

于 2012-11-13T14:57:16.390 に答える