2009-03-30 9 views
0

コントローラーがある場合、プロファイルは2つのアクションしかありません。最初のものはlistで、名前の一覧が表示されます。これらの名前をリンクにして、完全なプロフィールを表示するページに移動します。ですから、私は第2のアクションviewが必要です。それは、どのプロファイルを表示するかを示すパラメータを与えられます。Railsルートのヘルプ

例:私は/profile/listにアクセスします。ジョンのプロフィールを表示したい場合は、彼の名前をクリックします。私は/profile/view/johnに行くはずです。私のビューアクションは、johnパラメータを読み取り、適切なデータベースクエリを作成します。

これはroutes.rbにどのような変更を加える必要がありますか?乾杯。

答えて

0

:コントローラ/:アクション/:2がある例から保護するためのidルートジョンはリストに入っています。あなたは新しいもの

map.connect ':controller/:action/:user_name' 

を含めるように 編集routes.rbをを述べたように今のプロファイル/ビューのようなリクエスト/ジョンが

@params = {:controller => "profile", :action=> "view", :user_name => "john"} 

使用としてあなたを達するべきカスタムルートを持つように

params [:user_name]値を使用して、コントローラーのビューアクション内の関連するレコードを見つけて表示します。 urlの:user_name部分にいくつかの要件を設定することもできます。それはあなたが名前でプロファイルを特定したい場合は

http://www.seoonrails.com/even-better-looking-urls-with-permalink_fu

続けるであろう「/プロファイル/ビュー/ジョン」あなたはpermalink_fuプラグインを使用することができるよう、/ SomeRegexpToValidateNames/

map.connect ':controller/:action/:user_name', 
    :requirements => {:user_name => /\w+/} 
+0

map.connect ':controller /:action /:user_name'をどのように変更すれば、プロファイル/ビューをハードコードすることができますか?私は/ 1/2/3のような他のことは気にしないからです。 – alamodey

+0

/one/two/threeはone_controllerでtwoというアクションを呼び出そうとします。 Railsはこれを見つけられず、これを '一般的なページが見つかりません'で処理するべきではありません。本当にこれをハードコードしたい場合は、より厳格なものを指定することができます:requirements => {:controller =>/profile /、:action =>/view /、..} – Gishu

-1

モデルが "user"の場合、to_paramメソッドをオーバーライドする必要があります。これにより、 "id"ではなく "id-name"を返すことができます。 (例:/ profile/view/23-john)

私が知っているとおり、あなたが求めているのは正確ではありませんが、これは簡単な解決策です。

class User < ActiveRecord::Base 
    def to_param 
    "#{id}-#{name.gsub(/\W/, '-').downcase}" 
    end 
end 

そして、ちょうどルーティング設定に簡単なリソース宣言を追加します。私はむしろ、デフォルトを使用したい

map.resources :users 
0

と一致する必要がありますあなたが名前の重複があるときに困ってしまう...