2012-04-30 8 views
0

Rails 3.1。私はテーブルplacesを持っています。 cafe,restaurantなどの値を持つtypeという列があります。各行に1つの値があります。私のルートで列内の値に基づいて経路を配線します。

、私のようにリソースを定義します。

resources :places 

URLは次のとおりです。

http://domain.com/places/123?type=cafe 

私はどのナビゲーションメニューを決定するためにそれを使用するので、私はいつも私のURLに追加さtypeを持っています強調表示されます。

友好的なURLを作成します。

1. http://domain.com/places/cafe/123 
2. http://domain.com/cafe/123 

多くのありがとうございます。

答えて

2

ルートには2つの種類があります。あなたは2人の間でミックスをしようとしているように聞こえます。残念ながら、resourcesでやっているように、リソースの多いルートURLをカスタマイズすることはできませんが、作成しようとしているURLに合わせてルートを追加できます。あなたはこのような非機知ルートを作成する必要があります、これを達成するために

、:

resources :places, :only => [:create, :update, :destroy] 
match 'places/:type/:id' => 'places#show' 
match 'places/:type' => 'places#index' 
match 'places/:type/new' => 'places#new' 
match 'places/:type/edit' => 'places#edit' 

(あなたはできるが)あなたは、作成のための特別なルートを作成する必要が更新され、そして破壊しません。とにかくユーザーが実際にそれらを見ることはありません。フォームにパラメータとして場所の種類を含めてリンクを削除するだけで、URLからのものと同じようにコントローラで使用できるようになります。

コントローラでは、params[:type]でタイプにアクセスします。

+0

はこのような答えに取り組んでいました。私はちょうど彼がタイプのスペースを警告して、この宝石がhttps://github.com/Sutto/sluggedを解決するように指摘していました –

+0

実際には、URLのタイプにスペースを入れても問題ありません。 –

+0

しかし、まったく素敵ではありません:) –

1

@place.typeに格納されている値(@place = Place.find params[:id])を使用して、使用するナビゲーションを決めるのはなぜですか?

+0

これは正確にあなたが探している答えではありませんが、彼は正しいです。 – tybro0103

+0

はい、あなたは正しいです。これは簡単ですが、私はURLに固執します。なぜなら、URLにはそれ以上の意味が加わるからです。ちょうどそれがメニューなので、私はurlはどのメニューユーザーであるかについての情報を持っているべきだと思います。 –

関連する問題