2011-02-23 5 views
2

업데이트 (코드를 보여줄 수)액티브/페이지 : DDL에 자동 타임 스탬프를 지원

내가 명시 적으로 모든 마이그레이션의 create_table() 전화 후이 논리를 추가하지 않고 액티브의 automatic timestamps 직접 데이터베이스에 있지만 을 모방하고 싶습니다

. 반면

class StatusQuo < My::Migration::Subclass 
    def self.up 
    create_table :tbl do |t| 
     ... some columns ... 
     t.timestamps 
    end 
    add_default_now(:tbl, :created_at) # ALTER COLUMN ... DEFAULT NOW() 
    add_default_now(:tbl, :updated_at) # ALTER COLUMN ... DEFAULT NOW() 
    add_updated_at_trigger(:tbl)  # BEFORE UPDATE ON ... trg_updated_at() 
    end 
end 

, 여기에 내가 할 싶은 무엇을 :

class Druthers < My::Migration::Subclass 
    def self.up 
    create_table :tbl do |t| 
     ... some columns ... 
     t.timestamps 
    end 
    end 
end 

이 작업을 수행 할 수있는 쉬운 또는 권장 방법이 있나요 여기

내가 지금 무엇입니까? activerecord 3, postgresql 8.4를 사용합니다.

답변

1

가 여기에 지금까지 가지고 올 수있는 최선의 방법, 전체 소스 here : 우리의 연결 어댑터는 PostgreSQL의 경우

체크 config/environment.rb에서 확인합니다. 그렇다면, 다음을 수행 require 파일 :

  1. ColumnDefinition#to_sql 조건부 트리거

    만약을 적용 DEFAULT의 CURRENT_TIMESTAMP에게

  2. create_table을 가지고 기본값을

    포스 "created_at"와 "updated_at을"강제로 새로 생성 된 테이블에 "updated_at"열이 있으면 데이터베이스 FUNCTION을 참조하는 트리거를 설치하십시오.

꽤되지 않음 (제대로 타임 스탬프를 소개 처리하지 않습니다 change_table) 완전하지 (기능이 코드의 외부 정의를 유지할 수 있어야합니다),하지만 충분.

관련 문제