0

レール 3.1。私はテーブルを持っていますplaces。、などtypeの値を持つという列があります。各行に値が1つだけです。caferestaurant

私のルートでは、リソースを次のように定義します。

resources :places

URL は次のとおりです。

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

typeどのナビゲーション メニューを強調表示するかを決定するために使用するため、常にURL に を追加しています。

では、より使いやすい URL を作成したいと思います。次のいずれかを読み取る URL を作成するにはどうすればよいですか。

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

どうもありがとう!

4

2 に答える 2

2

ルートには、リソースを必要とするルートとリソースを必要としないルートの 2 種類があります。この 2 つをミックスしようとしているように聞こえます。残念ながら、リソースの豊富なルート URL は、 を介して行うようにカスタマイズすることはできませんが、作成しようとしてresourcesいる 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'

create、update、および destroy のために特別なルートを作成する必要はありません (可能ですが)。とにかく、ユーザーは実際にそれらを見ることはありません。フォームにパラメーターとしてプレース タイプを含め、リンクを削除するだけで、URL から来る場合と同じようにコントローラーで使用できるようになります。

コントローラーでは、 経由で型にアクセスしますparams[:type]

于 2012-04-30T01:55:50.507 に答える
1

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

于 2012-04-30T02:02:30.137 に答える