Ruby on Rails: создание модели с атрибутом, которого нет в базе данных? - PullRequest
2 голосов
/ 19 апреля 2010

У меня есть модель, которая устанавливает один из своих атрибутов на основе параметра формы, который отправляет пользователь. Модель является дочерним ресурсом родительского ресурса Home. Гипотетический пример:

Класс Person имеет атрибут возраста. Пользователь отправляет дату рождения в качестве параметра HTTP POST, и из этого мне нужно определить возраст пользователя. Поэтому я бы сделал что-то вроде этого:

  @home.people.build(:name => params[:name], :birthdate => params[:birthdate])

По понятным причинам Rails будет этому препятствовать, жалуясь, что не знает, какова дата рождения атрибута. Как правильно это сделать?

Можно ли использовать конструктор сборки с поставляемым решением, чтобы мои отношения с внешним ключом также были правильно настроены? Если нет, то как лучше обойти эту проблему?

1 Ответ

3 голосов
/ 19 апреля 2010

Вы можете использовать виртуальный атрибут, чтобы принять параметр из вашего POST, а затем вычислить значение, которое вы хотите для своего столбца (не проверено):

class Person < ActiveRecord::Base
  def birthdate=(birthdate)
    self.age = Time.now - Date.new(birthdate) # [1]
  end
end

[1] не правильный синтаксис - вам придется анализировать дату в соответствии с форматом вашего параметра - но вы поймете, что идея

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