2012-03-08 9 views
6

私のレールアプリケーションでは、現在、登録ユーザーIDを持っているユーザーがたくさんいます。URLバーのユーザーIDを隠す

ユーザーのインデックスにアクセスしてユーザーの表示ページをクリックすると、次のヘッダーの例が表示されます。

はlocalhost:3000 /ユーザー/ 3

それは簡単に人々がヘッダ内のユーザをスキップすることができますよう今、私はこれが好きではありません。

次のようにすると、user.usernameフィールドが代わりに表示されます。

はlocalhost:3000 /ユーザー/ adamwest

答えて

8

あなたはUserモデルにto_paramメソッドを定義することができます。

class User 
    ... 
    def to_param 
    name 
    end 
    ... 
end 

そしてすべての生成されたURLは、ユーザ識別子として代わりidnameを有するであろう。

sid = User.new :name => 'sid' 
user_path(sid) #=> "https://stackoverflow.com/users/sid" 

もちろん、コントローラでは、名前でユーザーを検索する必要があります。

class UsersController 
    ... 
    def show 
    @user = User.find_by_name(params[:id]) 
    end 
    ... 
end 

私はまた、あなたがfriendly_id宝石を見てみることをお勧めします。

FriendlyIdは長打の「スイスアーミーブルドーザー」で、ActiveRecordのための プラグインをPERMALINK。それはあなたがきれいなURLを作成することを可能にし、 は、 ActiveRecordモデルの数値IDであるかのように、人にやさしい文字列で動作します。

+0

ありがとうございました。私は今のところそれを基本に設定しましたが、よりフレンドリーなサイトを作るためにこのfriendly_idの宝石をチェックします。ありがとう。 – user1222136

+1

'User#name'にピリオドを含めることができれば、ルート上に':constraints => {:name => /.*/} 'を書いて、期間の後にRailsがピリオドの後にフォーマット。 –

関連する問題