2011-03-17 3 views
5

나는 테이블 생성하기 위해 레일 마이그레이션을 쓰고 있어요 updated_at 대 :이 다음 표에 결과레일 타임 스탬프 : updated_on/created_on created_at/

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.timestamps 
    table.string :country_tld 
end 

: 비극적

CREATE TABLE `sites` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `created_at` datetime DEFAULT NULL, 
    `updated_at` datetime DEFAULT NULL, 
    `country_tld` varchar(255) DEFAULT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://foo:[email protected]/baz/sites' 

을, 내 외국 데이터 소스는 해당 시간 스탬프에 old-school Rails updated_oncreated_on 열을 사용합니다. 물론 나는이 문제를 가져올 수 있습니다

create_table(TABLE, :options => FEDERATED_TABLE_CONFIG % TABLE) do |table| 
    table.datetime :created_on, :updated_on 
    table.string :country_tld 
end 

을 여전히 내가 원하는 동작을 타임 스탬프를 사용하여 얻을 수있는 사소한 방법이 경우에, 나는 그것에 대해 듣고 싶어요. 그리고 아니요, monkey-patching ActiveRecord::Timestamp은 이것을 수행하는 간단한 방법이 아니라고 생각합니다. 한 번의 마이그레이션에만 영향을 미친다는 것을 고려하십시오. ;) timestamps에 대한

답변

8

나는 당신의 질문이 무엇인지 잘 모르겠습니다. ActiveRecord::Timestamp_at 버전과 똑같은 created_onupdated_on 열을 사용합니다 (84 & 88 줄 참조).

하나의 라이너에서 datetimes를 생성하기 위해 어레이를 반복 할 필요는 없습니다. 대신를 사용

table.datetime :created_on, :updated_on 
+0

감사합니다, 나는 당신이 [ "섹시한 구문"] (http://guides.rubyonrails.org/migrations.html#creating-로 한 번에 여러 열을 만들 수 있다는 것을 몰랐다 테이블). –

+1

제 질문은 :'# timestamps' 도우미를 사용하여 예전 스타일의 열을 만들 수 있습니까? –

5

레일 소스는 다음과 같습니다

def add_timestamps(table_name) 
    add_column table_name, :created_at, :datetime 
    add_column table_name, :updated_at, :datetime 
end 

그래서 당신이 열 이름을 사용자 정의 할 수있는 방법이 없습니다 볼 수 있습니다. 솔직히 말해서 가장 좋은 방법은 제안하는 것입니다. 나는 개인적으로 같은 물건을 피하기 :

%w{created_on updated_on}.each {|col| table.datetime col.to_sym } 

그리고 바로 실제 add_column 명령을 쓰기는 읽기 더 자세한 비트도 쉽다.