2011-09-20 2 views
4

레일에서 모델의 기본값을 사용하려고합니다. 이 작업을 수행하는 가장 좋은 방법은 마이그레이션에서 : default 매개 변수를 사용하는 것입니다. 그러나 이것은 값에 대해서만 작동하는 것처럼 보입니다. 기본 표현식, 특히 currval('customers_id_seq'::regclass)을 설정하려고합니다. 직접 기본 표현식을 추가 할 수는 있지만 레일스에 기본값을 사용하는 방법을 알 수는 없습니다. 모델 객체를 만들 때이 기본값을 어떻게 사용할 수 있습니까? 나는 어디 idxfield 기본값 id에 테이블에 행을 추가 할 것이다, insert into testmodels (datafield) VALUES ('sometestdata');를 실행할 수 있습니다이 마이그레이션으로ActiveRecord에서 기본 SQL 식을 사용하는 방법?

class CreateTestmodels < ActiveRecord::Migration 
    def up 
    create_table :testmodels do |t| 
     t.integer :idxfield, :null=>false 
     t.string :datafield 
     t.timestamps 

    end 
    execute("ALTER TABLE testmodels ALTER COLUMN idxfield SET DEFAULT currval('testmodels_id_seq'::regclass)") 
    end 

    def down 
    drop_table :testmodels 
    end 
end 

:

편집 다음은보다 구체적인 예이다.

그러나 레일 콘솔에서 Testmodel.create(:datafield=>"testdata")을 실행하면 idxfield을 null로 대체하고 예외를 throw합니다.

답변

0

레일스가 마이그레이션에서 모든 기본 키 정의에 사용할 포스트그레스 시퀀스를 사용하려는 것 같습니다. 당신은 기본 키가 아닌 컬럼에 추가해야하는 경우

당신은 기본을 추가하는

execute("ALTER TABLE users ADD COLUMN foo INTEGER default nextval('users_id_seq'::regclass)") 
+0

내가 했어 성공처럼 create_table 외부의 ALTER 테이블을 실행하고 직접 추가해야합니다 실행을 사용하는 필드. 그러나이 테이블에 링크 된 모델에서 .create를 실행할 때 레일을 실제로 기본값으로 사용하는 방법을 알아낼 수 없습니다. – Belly

관련 문제