私はRuby&Railsを初めて使用します...目標は、主キー(id)が整数ではなくGUIDであるUserクラスを作成することです。ActiveRecordの最後の設定が適切に行われていると思います(整数型のID列を自動生成するのではなく、代わりに文字列型の列IDを使用します)。GUIDを生成できる関数です。
この時点で唯一欠けているのは、私が書いた*generate_guid*関数を使用してRailsにIDで新しいUserクラスを初期化させることです。
私の質問:RailsにランダムなGUIDでIDを初期化させるにはどうすればよいですか?例えば...
@user = User.new
@user.id
> 'AG5CE52' # <-- A randomly generated GUID...
Userのインスタンスがデータベースからロードされた場合、既存のユーザーのIDを変更してはならないことを考慮することも重要です。GUIDは、ユーザーを初めて作成するときにのみ生成する必要があります。
以下にいくつかのコードサンプルを示します。
モデル:
class User < ActiveRecord::Base
before_create :generate_guid # This doesn't seem to do anything (when I call User.new)
set_primary_key :id
protected
def generate_guid
begin
id = SecureRandom.urlsafe_base64
end while User.where(:id => id).exists?
self.id = id
end
end
移行:
class CreateUsers < ActiveRecord::Migration
def self.up
create_table :users, {:id => false} do |t|
t.string :id
...
end
execute "ALTER TABLE users ADD PRIMARY KEY (id);"
end
提案は大歓迎です!
- デイブ