私はアプリのためにレールを使用していますが、私はユーザーデータベースをスキャフォールドしました。私は各ユーザーのshow.html.erbページを持っていますが、現在のURLは/ users/1または/ users/2です。URLを乱数にするか、creatationのタイムスタンプにします。したがって、/ users/201109123121のようなもの、またはランダムなものであっても、生成された数字です。RailsはデフォルトのURLを変更します
これを行う方法はありますか?
私はアプリのためにレールを使用していますが、私はユーザーデータベースをスキャフォールドしました。私は各ユーザーのshow.html.erbページを持っていますが、現在のURLは/ users/1または/ users/2です。URLを乱数にするか、creatationのタイムスタンプにします。したがって、/ users/201109123121のようなもの、またはランダムなものであっても、生成された数字です。RailsはデフォルトのURLを変更します
これを行う方法はありますか?
はい、あなたの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])
はあなたの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(ユニバーサル固有識別子)
+1のポイントだと、これはかなり競合状態の可能性を減少させる必要があります。本当に重要な場合は、代わりにGUIDを使用することを検討してください。 –