0

2 つのアクションしかないコントローラー、プロファイルがあるとします。最初のものはlist、名前のリストを表示するだけです。これらの名前をリンクにして、完全なプロファイルを表示するページに移動するようにします. したがって、2 番目のアクション が必要です。このアクションはview、表示するプロファイルを示すパラメーターをベッド フィードすることができます。

例: にアクセス/profile/listし、John のプロフィールを表示する場合は、彼の名前をクリックすると に移動します/profile/view/john。ビュー アクションは john パラメータを読み取り、適切なデータベース クエリを実行します。

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

4

3 に答える 3

0

リストに John が 2 人いる場合を防ぐために、デフォルトの :controller/:action/:id ルートを使用したいと思います。

言及したようなカスタム ルートを作成するには、Routes.rb を編集して新しいルートを含めます。

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

profile/view/john のようなリクエストが次のように届くはずです。

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

params[:user_name] 値を使用して、コントローラーのビュー アクションで関連するレコードを見つけて表示します。URL の :user_name 部分にいくつかの要件を設定することもできます。たとえば、/SomeRegexpToValidateNames/ と一致する必要があります。

map.connect ':controller/:action/:user_name',
   :requirements => {:user_name => /\w+/}
于 2009-03-30T12:26:48.760 に答える
0

プロファイルを名前で識別したい場合は、「/profile/view/john」として permalink_fu プラグインを使用できます

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

これにより、名前の重複が発生したときに問題が発生しなくなります...

于 2009-03-30T13:30:42.117 に答える
-1

モデルが「ユーザー」の場合、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
于 2009-03-30T11:55:06.027 に答える