29

私には2つのタイプのクラスがあります:

BaseUser < ActiveRecord::Base 

User < BaseUser

これは、Authlogicの認証システムを使用してacts_as_authenticします。この継承は、単一テーブル継承を使用して実装されます

新しいユーザーが登録する場合、私は彼をユーザーとして登録します。ただし、同じメールアドレスのBaseUserが既にある場合は、BaseUserからUserにすべてのデータをコピーして新しいユーザーを作成するのではなく、そのBaseUserをデータベース内のUserに変更したいと思います。 id)。これは可能ですか?ありがとう。

4

3 に答える 3

95

スティーブの答えは機能しますが、インスタンスは呼び出されBaseUserたときにクラスであるため、saveで定義された検証とコールバックUserは実行されません。おそらく、 becomesメソッドを使用してインスタンスを変換することをお勧めします。

user = BaseUser.where(email: "user@example.com").first_or_initialize
user = user.becomes(User) # convert to instance from BaseUser to User
user.type = "User"
user.save!
于 2012-12-24T00:47:34.900 に答える
17

タイプフィールドを「ユーザー」に設定して、レコードを保存するだけです。メモリ内オブジェクトは引き続き BaseUser として表示されますが、次にメモリ内オブジェクトをリロードすると User になります。

>> b=BaseUser.new
>> b.class # = BaseUser

# Set the Type. In-Memory object is still a BaseUser
>> b.type='User'
>> b.class # = BaseUser
>> b.save

# Retrieve the records through both models (Each has the same class)

>> User.find(1).class # = User
>> BaseUser.find(1).class # User
于 2010-07-16T08:19:45.837 に答える