2012-02-02 13 views
0

town_centerコントローラ、sawmillコントローラ、quarryコントローラなどの複数のコントローラを持つ状況があります。route:nameに基づく異なるコントローラ

私のアプリケーションのURLは、おそらく/ town_center/viewやsawmill/view、quarry/viewなどのようなものである必要があります。

実際にこのようなルートを書き込む方法が問題です。例えば、town_centerコントローラの場合、私は次のようなものを持っています:

scope :path => '/town_center', :controller => :town_center do 
    get '/view/' => :view, :as => 'town_center' 
    end 

これは問題ありません。実際にtown_centerコントローラでviewアクションを実行すると、URLにparams属性として存在しないため、建物のIDを取得する簡単な方法はありません。

get '/view/:name' => :view, :as => 'view_building' 

しかし、この方法の問題点は、すべてが1つのコントローラにリダイレクトされるということです。

一つのシンプルなアイデアは、のようなルートを作成することです。だから、私の質問は、URLに識別子があり、それでも特定のコントローラにリダイレクトするようにするにはどうしたらいいですか?

これは一般的な考え方では間違っていると思われる場合は、その方法がありますか?

答えて

1

Railsアプリケーションの標準となっているRESTfulルーティングを使用できます。

MyApp::Application.routes.draw do 
    resources :town_centers 
    resources :sawmills 
    resources :quarries 
end 

編集または単数経路について、コメントで示唆されているように:

MyApp::Application.routes.draw do 
    resource :town_center 
    resource :sawmill 
    resource :quarry 
end 

これは自動的に作成、読み取り、更新に必要なすべてのルートを与え、あなたの様々なモデルを破壊します。

rake routesを実行すると、アプリケーションで使用可能なすべてのルートが表示されます。これにはGET /town_centersGET /town_centers/:idのGETルートが含まれ、後者はTownCentersControllerにの表示アクションを実行し、/views/town_centers/show.html.erbビューテンプレートを表示します。

あなたがレールに新しいしていると、まだガイドをルーティングかをはじめ読んでいない場合、彼らはここで見つけることができます:

はRailsの入門:http://guides.rubyonrails.org/getting_started.html

Railsのルーティング: http://guides.rubyonrails.org/routing.html

+0

私はこれらのことを知っていますが、私はリソースを使用するのが好きではありません。自分のルートを手作業で書くことを好みます。私はちょうどURLの一部として:idを使うことができることを知っていますが、単一のidを持つtown_centerが1つしかないので、重複していると感じました。しかし、私はそれが歩く安全な道だと思います。 – Spyros

+0

あなたは、各エンティティのIDが静的であると言っていますか?これらがハードコードされたIDの場合、ルート定義の一部としてそれらを渡すことができるはずです。例: 'get '/ view /' =>:view、:as as => 'town_center'、:id => 14' – Ryan

+0

ルートリソースは複数である必要はありません。リソース:town_centerを持つことができます。自分のルートを転がることはお勧めしません。 –

関連する問題