2010-07-11 3 views
0

다음은 고객입니다 :RoR에서 다른 테이블을 참조하는 열을 어떻게 추가합니까?

class CreateCustomer < ActiveRecord::Migration 

     def self.up 
     create_table :customers do |t| 
      t.column :email,  :string, :null => false 

     end 
     end 

     def self.down 
     drop_table :customers 
     end 
    end 

그리고 이것은 고객 정보입니다 :

class CustomerInfo < ActiveRecord::Migration 

    def self.up 
    create_table :statuses do |t| 
     t.column :statuses,  :string, :null => false 

    end 
    end 

    def self.down 
    drop_table :status 
    end 
end 

는 내가 뭘하고 싶은 고객이며, 고객 정보는 하나 개의 관계에 하나가 있습니다. 새로운 마이그레이션에서 어떻게해야합니까? 고맙습니다.

답변

0

레일스를 1에서 1로 만들려면 어느 모델이 외래 키를 저장할 것인지 결정해야합니다. 귀하의 경우에는 fk를 저장하는 상태가 필요할 것이므로 customer_id이라는 정수 열을 상태 테이블에 추가하십시오. 그런 다음 고객 및 상태에 has_one/belongs_to을 추가 할 수 있습니다. belongs_to은 항상 외래 키가있는 모델로 이동합니다.

또한 Rails가 단 하나의 이름으로 테이블을 호출하는 것을 좋아할지 모르겠다. 따라서 '상태'대신 '상태'라고 쓰려면 여분의 작업을해야 할 것입니다.

+0

그래서 마이그레이션에 추가 코드를 추가 할 필요가 없습니까? 그냥 모델로 가서 has_one과 belongs_to 관계를 설정하면 모든 마법이 작동할까요? – Tattat

+0

당신은 마이 그 레이션에 외래 키 (customer_id)를 추가해야하지만, 그 후에, 그냥 has_one/belongs_to 예 – x1a4

0

당신은 당신의 다음 이전에 일을 다음 시도 할 수 있습니다

add_column : customer_infos : CUSTOMER_ID : 정수 : 참조 => "고객": 널 (null) => : 진정한

그런 다음 당신은 has_one을 추가 할 수 있습니다/고객 및 Cusomer_infos에 belongs_to.

SQL 문을 실행할 수도 있습니다.

문 = "ALTER TABLE 사용자 ID ID를 변경 SMALLINT (5) UNSIGNED NOT NULL AUTO_INCREMENT"액티브 :: Base.connection.execute (문) 당신이 당신의 마이그레이션

참고이을에 수동으로 입력 할 수

단지 예일뿐입니다. 최종 SQL 문 구문은 데이터베이스에 따라 다릅니다.

관련 문제