Передача значений без атрибутов в проект машиниста - PullRequest
1 голос
/ 22 октября 2011

Это упрощенный пример того, что я пытаюсь сделать ...

Предположим, у меня был объект Person:

Person.blueprint do
  name
  age
end

Я хочу иметь возможность сделать что-то вроде этого:

Person.blueprint(:from_birthdate) do
  name
  age { Time.now - birthdate }
end

Person.make(:from_birthdate, :birthdate => 5.years.ago)

Однако я не могу передавать значения в make, которые не являются фактическими атрибутами объекта Person. Есть ли способ передать произвольный объект в план?

1 Ответ

0 голосов
/ 22 октября 2011

Вы можете сделать attr_accessor для birthdate, но это выглядит немного глупо.Возможно, вам придется просто определить отдельный метод:

def Person.make_from_birthdate(attributes)
  birthdate = attributes.delete :birthdate
  Person.make attributes.merge(:age => Time.now - birthdate)
end

Однако хранение возраста обычно является плохой практикой.Поскольку возраст меняется со временем, а дата рождения не меняется, обычно вы хотите сохранить дату рождения в БД и при необходимости рассчитать возраст (на основе сегодняшней даты).

...