我正在使用rails 3.2.1和最新设计。这个宝石在User
模型中为我们提供了许多列,例如:
current_sign_in_at, remember_created_at, last_sign_in_at
等等
所以我决定保持我的模型干净并移动除id,email,password,timestamps
表中的所有字段user_sessions
(模型UserSession
),寻找如何解决这个问题我发现了委托方法,但是不明白如何实现这个功能。如果您有任何其他想法,请完整解释。
我第一次在测试应用程序中尝试了一个简单的例子。我创建了两个模型:User
(email:string)和Profile
(user_id:integer,name:string)。他们在这里:
class User < ActiveRecord::Base
has_one :profile
delegate :name, :name=, :to => :profile, :allow_nil => true
end
class Profile < ActiveRecord::Base
belongs_to :user
end
我已经打开了rails c并尝试了:
u = User.new #=> new user object
u.name #=> nil
u.name = 'something' #=> "something"
u.name #=> nil
因此我甚至无法设置一个值,因为之后它仍然因某种原因而无效。我希望更改值并保存此对象。另外我了解它只保存User
,而不是Profile
,因此我考虑实现before_save
,我将处理所需的值并保存Profile
对象,如:<登记/>
before_save :save_profile
def save_profile
#get self.name and somehow save profile object
end
和更新功能相同。可以实现吗?或者建议一个更好的方法,拜托。请再次注意,我想将其实现为Devise
用户模型。谢谢!
答案 0 :(得分:0)
尝试:
u = User.new #=> new user object
u.build_profile
u.name #=> nil
u.name = 'something' #=> "something"
u.name #=> ?