Отображение метки времени Rails3 в устаревшей таблице - PullRequest
3 голосов
/ 09 июля 2011

У меня есть устаревшая таблица со столбцом для отметки времени последнего обновления. Теперь я хочу сообщить моей модели, что атрибут rails updated_at сопоставлен со старым столбцом.

alias_attribute :updated_at, :lastcall

Теперь я могу получить доступ к столбцу, но он не обновляется при обновлении объекта. Итак, как я могу использовать метки времени рельсов со старым столбцом? Лучший, P

Ответы [ 3 ]

2 голосов
/ 10 июля 2011

Попробуйте также добавить это, что будет псевдонимом метода установки.

alias_attribute :updated_at=, :lastcall=
1 голос
/ 03 февраля 2012

Я также хотел бы обратить ваше внимание на это , если имена столбцов вашей метки времени являются общесайтовыми (как и мои). Я не хотел загромождать свои модели, и, к счастью, вы можете сделать обезьяну-заплатку ActiveRecord::Timestamp. Я поместил приведенное ниже в каталог с именем lib/rails_ext/active_record.rb (я урод), и назвал его с объявлением require 'rails_ext/active_record' в одном из моих инициализаторов в config/initializers/.

module ActiveRecord
  module Timestamp
    private
    def timestamp_attributes_for_update #:nodoc:
      [:modified_time, :updated_at, :updated_on, :modified_at]
    end
    def timestamp_attributes_for_create #:nodoc:
      [:created_date, :created_at, :created_on]
    end
  end
end

Мои пользовательские атрибуты оказались :modified_time и :created_date. Вы бы указали свой столбец :lastcall в одном из них (я полагаю, timestamp_attributes_for_update). Не нужно гадить с твоими моделями.

1 голос
/ 10 июля 2011

Я не знаю, есть ли «правильный» способ сделать это, но вы можете сделать это с помощью фильтра before_save или before_update на модели.

class LegacyModel < ActiveRecord::Base
  before_update :update_lastcall

  private

  def update_lastcall
    self.lastcall = Time.now
  end

end

Если вы не хотите запутать модель, вы можете поместить ее в Обозреватель.

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