2011-09-15 6 views
2

私はアプリのためにレールを使用していますが、私はユーザーデータベースをスキャフォールドしました。私は各ユーザーのshow.html.erbページを持っていますが、現在のURLは/ users/1または/ users/2です。URLを乱数にするか、creatationのタイムスタンプにします。したがって、/ users/201109123121のようなもの、またはランダムなものであっても、生成された数字です。RailsはデフォルトのURLを変更します

これを行う方法はありますか?

答えて

1

はい、あなたのUserモデルでto_paramを定義します。

def to_param 
    timestamp 
end 

そして、あなたのモデルにtimestamp属性を定義し、before_createでそれを設定します。

class User < ActiveRecord::Base 
    before_create :set_timestamp 

    # model code goes here 
    def set_timestamp 
    self.timestamp = created_at.to_i 
    end 

しかし、二人のユーザが正確に作成された場合同じ秒、あなたは問題に遭遇するでしょう。これを少しランダムにしたいかもしれません。あなたは今もそのフィールドに基づいてそれらを見つける必要があります:

User.find_by_timestamp(params[:id]) 
+0

+1のポイントだと、これはかなり競合状態の可能性を減少させる必要があります。本当に重要な場合は、代わりにGUIDを使用することを検討してください。 –

0

はあなたのGemfile

gem 'uuidtools' 

にこれを追加し、あなたがそうのようにそれを要求すると

#models/user.rb 
class User < ActiveRecord::Base 
    before_create :set_uuid 

    # model code goes here 
    def set_uuid 
     self.uuid = UUIDTools::UUID.timestamp_create.to_s 
    end 
end 

を行います。上記の答えとは異なり

User.find_by_uuid(params[:id]) 

それは素晴らしいアイデアであることこの上ありませんUUID(ユニバーサル固有識別子)

関連する問題