2016-07-29 17 views
0

`id`フィールド以外のものを使用するようにレールにデフォルトルート/パスヘルパーのオーバーライド私のデータベースでは、私は各ユーザーごとに生成する固有のハッシュIDを使用したかったのです。それは滑らかな印象に見えると私は、私が以前使用していたルートパスヘルパー使用しての利便性を失うしかし、私のシーケンシャルDB情報は<code>id</code>からを使用しての</p> <pre><code>/users/:id # eg. /users/7 </code></pre> <p>代わりに、私は、URLを使用して私のアプリに任意のユーザー」オブジェクトの<code>show</code>ページを表示することができます

/users/kF87sl8H2 

を暴露回避 - user_path(@user)を。私は今では複数の場所でそれを置き換える必要がありますuser_path(id: @user.hash_id)

古いルートヘルパーを維持し、ちょうど私の@userインスタンスを渡す方法はありますか?私はそれが何とかパスヘルパーをオーバーライドする必要がありますか?

また、わずかに関連しています - これらのハッシュIDを生成することに関するベストプラクティスはありますか?私はちょうどSecureRandom.hexを使用するつもりだったが、私はGoogle+が数字だけを使用し、Youtubeは異なる大文字を使用することを知っている。

https://www.youtube.com/watch?v=dQw4w9WgXcQ

これらを生成する良い方法はありますか?

ありがとうございます!私はあなたがあなたのUserクラスのためのルートヘルパーメソッドをオーバーライドするには、以下の

class User 
    def to_param 
    hash_id 
    end 
end 

答えて

1

を行うことができると信じて

2

はこれを試してみてください。

resources :users, param: :hash_id 

はあなたのルートに paramは、上記のように、あなたの model fieldresourcesでファイルを追加し、以下のように、あなたのコントローラで find方法を変更します。

@user = User.find_by(hash_id: params[:hash_id]) 

Hereは、同じものに関する公式のドキュメントです。

関連する問題

 関連する問題