2009-04-24 1 views
1

私のアプリケーションは、現在、非常に簡単なURLのレイアウトを持っていますURLのレイアウトは

map.resource :account, :controller => "users", :only => [:show, :update, :destroy] 
map.resources :workouts do |workout| 
    workout.resource :chart, :only => [:show] 
    workout.resources :taggings, :only => [:destroy, :create] 
end 

は私に、現在のユーザーのための素敵な簡単なURLを与えます。 私は現在、公共の機能を追加しています。一般の人々がアイテムを見る能力です。これらのURLにユーザーのログイン名を付加したいと思います。同時に、パブリックユーザーは1つのトレーニングリソース以外のものにアクセスする必要はありません。私はこれを行うための最善の方法はわかりません。

/teich/workouts/3454 

おおよそ

/:user_login/workouts/:id 

私はpath_prependくださいです:私はのように見えるURLを羽目になるしたいのですが?現在のユーザーのために、完全なRESTfulコントロールを望んでいる人は、私が今行っているように直接URLの代わりにユーザー名を前もって保持するのがベストプラクティスですか?とにかく私は:beforeの権限チェックをしているので、path_prependの余分なルートはすべて心配しないでください。

答えて

1

Userモデルのto_paramを上書きするのが最も簡単な方法でしょう。

def to_param 
    "#{id}-#{login}" 
    end 

Railsは、モデルのパスを生成するときにこのメソッドを使用します。次に、文字列を検索すると、整数を取得するto_iが送信されます。

無効なURL文字もエスケープする必要があることを忘れないでください。

+0

ありがとうございました。それは私が探している解決策ではありません。私が通常の安らかなルート '/ users /:id /'を持っていれば、to_paramを使ってログインに変更することができます。しかし、ここでのいくつかの違いは、主に/ユーザーが最初に欲しくないことです。 – teich

+0

私はこれをテストしなければなりません(今は時間がありません)、map.named_user_workouts_path ':user_id/workouts /:id'のような名前付きルート 'named_user_workouts_path'を作成できるようです。 ビューでは、<%= link_to "#{@user.login}'s workout"、named_user_workouts_path(@user、@workout)%>のように使用できます。ユーザーモデルが名前付きルートを通過するため、to_paramが呼び出されて 'id'が取得されます。私はこれをある時点で見つけたいと思っています。 – Ben

+0

ありがとうございます。わかりやすくするために、私は標準的なルートを使っています。 :)/users/justは私を殺すつもりはない。 – teich

関連する問題