2011-12-29 8 views
0

IDではなくユーザー名に基づいてカスタムルートを取得しようとしています。私はユーザーのショーページに行くために働いているが、同じ構文を使って彼の投稿とコメントを見ることができるように、リソースをネストしようとしている。カスタムネストされたルート

例:

作品... "mysite.com/users/ ユーザ名 /"

が動作しない

...「mysite.com/users/ ユーザ名 /記事/」

routes.rbを

... 
# Users with the Username... 
match 'users/:username' => "users#show" do 
    get :posts 
    get :comments 
end 

# Users with the ID... 
resources :users do 
    get :posts 
    get :comments 
end 
... 

答えて

1

おそらく、あなたはto_paramメソッドを使用して、ネストされたルート/リソースを更新することができます。

routes.rbを:UserControllerでで見つけた..for

resources :users do 
    resources :posts 
    resources :comments 
end 

user.rb

class User < ActiveRecord::Base 
    def to_param 
    username 
    end 
end 

@user = User.find_by_username(params[:id]) 

(または任意のバリエーションo fのユーザー名の基準による検索)

+0

私は以前このソリューションを見てきました。それはハックのように思えますし、組み込みのfindメソッドをオーバーライドし、エラーの束につながる可能性があります。レール3.1内でこれを行うには、よりクリーンな方法が必要です。 –

+0

これはモデルのfindメソッドには何ら影響しません。そのため、発生する可能性のあるエラーがわかりません。はい、コントローラの検索条件をユーザー名で検索するために条件を変更する必要がありますが、とにかくそれをやっていると仮定します。これは、オブジェクトのto_paramメソッドをオーバーライドするだけです。つまり、params [:id]がユーザー名になります。また、自動的にユーザー名を使用してルートを構築します。私はそれがどのように実際にはるかにクリーナーを得ることができるか分からない。コントローラー内のパラメーターから数値IDを引き続き使用する場合は、別の話です。 – miked

関連する問題