2013-10-02 3 views
1

, 나는 레일 내 마이그레이션 내부 코드의 조각을 사용하고 마이그레이션 해당 SQL 코드 : 레일 그래서

add_column :target_table, :FK, :integer 

    execute <<-SQL 
     ALTER TABLE target_table 
     ADD CONSTRAINT constraint FOREIGN KEY (FK) 
     REFERENCES some_table (id) 
     ON UPDATE CASCADE ON DELETE RESTRICT 
    SQL 

그리고 어떤 좋은 프로그래머로, 나는 가능한 한 빨리 짧은 일을 계속하고 싶습니다

.

이 언어를 처음 사용하고 있으며 아래 코드가 (모든면에서) 내 SQL과 동일한 지 알고 싶습니다.

add_column :target_table, :FK, :integer, null: false 
    add_index :targe_table, :FK 

PLUS : 그 코드는, 업 방법 내부했다 경우도 내 아래 방법과 같이해야합니까?

- 편집 - 나는 몇 가지 조사를 수행하고이 일을 세 번째 방법에 대해 읽은

:

add_column :target_table, :FK, :integer, null: false, references: some_table 

모두 해당하는 것들이다를? 레일 규칙에 따라 인덱스에 적절한 제약 조건이 추가됩니까? 어떤 사람이 그 차이점을 말할 수 있다면 정말 고마워 할 것입니다.

답변

1

마이그레이션 파일에

execute <<-SQL 
     ALTER TABLE target_table 
     ADD CONSTRAINT constraint FOREIGN KEY (FK) 
     REFERENCES some_table (id) 
     ON UPDATE CASCADE ON DELETE RESTRICT 
    SQL 

같은 데의 문제는 이제 SQL 또는 현재 사용중인 SQL의 특별한 맛과 붙어 있다는 점이다. 당신은 그 일의 적절한 방법은 레일의 마법은 어디 사용하여 SQL 어떤 맛을 알고 당신이

할 것이라고 다운을 할 옳은 일을

을 할 것이라고 방법

add_index :targe_table, :FK 

말한다처럼

remove_index : targe_table, : FK

+0

흠 그래서 기본적으로 레일을 사용하는 것이 더 일반적인 것입니다. 그러나 정확히 동일한 결과를 생성합니까? 그리고 down 메소드에 remove_column 호출을 추가해야합니까? –

관련 문제