初始化ActiveRecord对象而不覆盖初始化

时间:2010-10-29 20:44:28

标签: ruby-on-rails

在尝试创建一个像这样覆盖初始化的ActiveRecord实例时,我很快遇到了问题:

class Email < ActiveRecord::Base
  belongs_to :lead
  def initialize(email = nil)
    self.email = email unless email.nil?
  end
end

我找到this帖子,清除了原因。

无论如何,我可以避免像这样的创建代码:

e = Email.new
e.email = "info@info.com"

我想在一行代码中创建和初始化我的对象。

这可能吗?

2 个答案:

答案 0 :(得分:3)

e = Email.new(:email => "info@info.com")

答案 1 :(得分:1)

ActiveRecord :: Base#new也采用了方便的块变化

email = Email.new do |e|
  e.email = params[:email] unless params[:email].blank?
end

在先前的答案中使用散列版本的建议是,如果我不想在实际分配上放置任何逻辑,我通常会这样做。