Rails设计委托集并保存两个模型

时间:2012-02-09 22:01:22

标签: ruby-on-rails ruby-on-rails-3 delegates devise

我正在使用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用户模型。谢谢!

1 个答案:

答案 0 :(得分:0)

尝试:

u = User.new #=> new user object
u.build_profile
u.name #=> nil
u.name = 'something' #=> "something" 
u.name #=> ?