2013-12-16 6 views
2

Я создаю приложение JRuby on Rails для устаревшей базы данных. Ни одна из таблиц не имеет столбца «created_at» (поэтому я могу просто добавить это дополнение), но все они имеют столбец «modtime» вместо столбца «updated_at». Я не могу изменить все имена столбцов с «modtime» на «updated_at» в db, так как большая часть java-кода и sql-функций использует это имя столбца. Можно было бы просто добавить столбец «updated_at» ко всем таблицам, но это было бы запутанным и менее идеальным.Изменить имя столбца updated_at в ActiveRecord/Rails

Как я могу заставить ActiveRecord использовать «modtime» в качестве имени столбца вместо «updated_at»?

+0

Отметьте этот ответ: http://stackoverflow.com/a/3981571/2622934 – cschroed

+0

Спасибо, ребята, я прочитал этот ответ, но я действительно не понимаю: где этот файл active_record.rb идет? В чем смысл «создать файл, называемый в инициализаторах»? Я предполагаю, что я положил: modtime в массиве, который я передаю методу timestamp_attributes_for_update? – eljaydub

ответ

1

Вот что вам нужно сделать для ActiveRecord использовать modtime в качестве колонки обновления:

Создать файл в каталоге конфигурации/инициализаторах имени active_record_patch.rb

# config/initializers/active_record_patch.rb 
module ActiveRecord 
    module Timestamp  

    private 

     def timestamp_attributes_for_update #:nodoc: 
     [:modtime, :updated_on, :modified_at] 
     end 
    end 
end 

Что вы делаете здесь переопределяя метод ActiveRecord :: Timestamp timestamp_attributes_for_update, который он использует для идентификации имен его атрибутов обновления. Файл необходимо поместить в config/initializers, так как все файлы в инициализаторах запускаются после загрузки приложения Rails.

Это патч обезьяны и переопределяет нормальное поведение ActiveRecord :: Timestamp, которое может сломаться при использовании другой версии ActiveRecord.

Надеюсь, это поможет.

+0

Спасибо! Это ясный и краткий ответ и работает для меня на Rails 4.0.2. – eljaydub

+1

Этот патч обезьяны тихо нарушает обычное поведение метки времени, потому что исходные имена столбцов: [: updated_on,: updated_at] (https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/ timestamp.rb # L91). Столбец 'updated_at', который был создан генератором rails по умолчанию для других моделей AR, не обновлялся. Просьба уточнить ваш ответ. –

Смежные вопросы