Инициализация объекта ActiveRecord без переопределения инициализации - PullRequest
3 голосов
/ 30 октября 2010

Я быстро столкнулся с проблемами при попытке создать экземпляр ActiveRecord, который переопределил инициализацию следующим образом:

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

Я нашел этот пост, который выяснил, почему это происходит.

В любом случае, можно ли избежать создания кода следующим образом:

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

Я бы хотел создать и инициализировать свои объекты в одной строке кода предпочтительно.

Возможно ли это

Ответы [ 2 ]

3 голосов
/ 30 октября 2010
e = Email.new(:email => "info@info.com")
1 голос
/ 30 октября 2010

ActiveRecord :: Base # new также использует удобный вариант блока

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

Рекомендации по использованию хэш-версии в предыдущих ответах таковы, как я обычно это делаю, если не хочу вводить какую-либо логику в фактическое назначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...