私はrails 3.2.1と最新のものを使用しています。この宝石のようなUser
モデルで私たちに多くの列を与える:など
、
current_sign_in_at, remember_created_at, last_sign_in_at
だから私はきれいな私のモデルを維持し、テーブルにid,email,password,timestamps
以外のすべてのフィールドを移動することを決定するには、どのように探し、user_sessions
(モデルUserSession
)と呼ばれますこれを解決するには、デリゲートメソッドを見つけましたが、この機能を実現する方法を理解していません。もし他のアイデアがあれば、完全に説明してください。
初めて、私はテストアプリケーションで簡単な例を試しました。私はUser
(電子メール:文字列)とProfile
(ユーザーID:整数、名前:文字列)の2つのモデルを作成します。ここで彼らは、次のとおりです。Rails Devise代理人が両方のモデルを設定して保存する
class User < ActiveRecord::Base
has_one :profile
delegate :name, :name=, :to => :profile, :allow_nil => true
end
class Profile < ActiveRecord::Base
belongs_to :user
end
私はレールcを開いて、試してみました:
u = User.new #=> new user object
u.name #=> nil
u.name = 'something' #=> "something"
u.name #=> nil
を、それはまだいくつかの理由のためにnilを後にすることをので、私はしても、値を設定することはできません。私は値を変更し、このオブジェクトを保存することを期待します。また、私はそれだけでUser
、ないProfile
を救うことを理解し、私はおよそように、私は必要な値を処理し、Profile
オブジェクトを保存しますbefore_save
を実装すると思う:
before_save :save_profile
def save_profile
#get self.name and somehow save profile object
end
と更新機能のために同じ。それは実現できますか?または、より良い方法を提案してください。また、これをDevise
ユーザモデルに実装したいと再度注意してください。ありがとう!
ありがとう!これはまさに私が必要なものです! –
Createは完全に機能しますが、もう1つ質問があります。既存のビルドを更新するにはどうすればいいですか? 'u.email = 'new_val''と' u.save'を変更すると 'User'モデルが更新されますが、' u.name =' new_val''を試してみると 'u.save'は何もしません。 (0.2ms)begin transaction (0.1ms)コミットトランザクション => true ' –
プロファイルを保存するためにユーザーモデルにコールバックを追加すると問題ありません – apneadiving