2012-12-02 3 views
0

모델을 만들 때 타임 스탬프를 편집했습니다.migrate "column": 타임 스탬프가 작동하지 않습니다.

사용자가이 모델에서 무엇을 편집 할 때마다 시간/날짜가 업데이트 될 것으로 예상 했었습니다.

하지만 난 그냥 데이터베이스 스키마가

t.datetime "edited" 

로 아래로 작성하고 사용자가 양식에 데이터를 입력 할 것으로 예상 것을 보았다.

여기가 어떻게됩니까?

SQL DB에서 타임 스탬프 열을 만들기 위해 마이그레이션 파일을 어떻게 변경해야합니까? 아니면 모델 자체에 할당해야합니까? 나는 그것이 사용자의 입력에 의존하지 않으려는

들으 시스템 전지를 수 있습니다.

답변

6

모델을 만들 때 ActiveRecord 마이그레이션을 생성하여이 모델과 관련된 데이터를 저장할 테이블을 만들어야합니다. 모델이 '제품'이라고 예를 들어, 실행

rails g migration create_products_table 

이 DB에서 마이그레이션 파일을 생성/이전 (마이그레이션 파일을 생성하는 타임 스탬프, 예를 들어 접두사 "20121201200720_create_products_table.rb ")

마이그레이션 파일이 다음과 같아야합니다

class CreateProducts < ActiveRecord::Migration 
    def change 
    create_table :products do |t| 

     t.timestamps 
    end 
    end 
end 

이 마이그레이션 (rake db:migrate), 액티브 자동으로 테이블에 두 개의 열을 만듭니다를 실행하면 : created_at 및. 그런 다음 schema.rb (db)를 살펴보십시오.

create_table "products", :force => true do |t| 
    t.datetime "created_at", :null => false 
    t.datetime "updated_at", :null => false 
end 

created_at 제품이 생성되는 타임 스탬프를 저장합니다 : 그런 일이있을 것입니다. updated_at은 제품이 마지막으로 업데이트 된 시간 스탬프 (여기에서 찾고있는 것)를 저장합니다.

따라서 사용자 정의 열을 만들 필요가 없으므로 ActiveRecord의 기본 제공 타임 스탬프에만 의존해야합니다.

+0

그래서 쉽게 .. 감사합니다. 나는 단지 초보자입니다. Rails가 나를 위해 그들을 만들 수 있다는 것을 몰랐습니다. – user1837021

1

레일즈, 더 구체적으로 ActiveRecord는 데이터베이스에 영향을받지 않습니다. 응용 프로그램을 마이그레이션하거나 다른 데이터베이스, 스택 등을 사용하여 배포하려는 경우 유용합니다. 그러나 AR이 데이터베이스 관련 기능을 지원하지 않는다는 제한 사항 중 하나가 있습니다.

AR 열 유형 목록은 here입니다. 보시다시피, "timestamp"는 AR 열 유형이지만 "datetime"유형의 별명입니다. 당신이 당신의 응용 프로그램에서 실제 SQL 타임 스탬프 열을 사용하려는 경우

그래서, 당신은 두 가지 중 하나를 수행 할 수

  1. 당신은 마이그레이션 파일을 편집하고`t을 시도 할 수 있습니다.수정 된 "TIMESTAMP" '(AR은 사용자 정의 유형을 문자열로 허용하므로 테스트되지는 않지만 작동해야 함)

  2. 데이터베이스에 열을 생성하고 AR이이를 가져올 수 있습니다.

당신이 레일에 새로운 경우에, 나는 강하게 Gullaume Galuz의 답변을 사용하여 제안하고 created_atupdated_at 열을 돌봐 AR 수 있습니다.

그렇지 않은 경우 this question을 보면 DB 관련 TIMESTAMP 열을 사용해야 할 필요가 명확하게 설명됩니다. (크기, 속도, 구역 등)

관련 문제