2011-08-10 1 views
0

6 개월부터 3 & 레일에서 작업했지만 여전히 "문자열"컬럼을 기본 키로 구현할 수있는 방법에 대해서는 아직 모르고 있습니까? 나는 그것이 MySQL의 테이블에 대한 기본 키가 아닌 정수 필드를 허용하지 않는 것 같아요. 예를 들어. customer_code : string을 기본 키로 사용하는 고객 테이블이있는 경우 & customer_code 필드를 통해 고객 테이블을 참조하는 제품 테이블 (제품 테이블의 customer_code)은 외래 키입니다. 레일 3에서이 관계를 어떻게 구현할 수 있습니까? 누구나이 관계를 구현하는 적절한 방법을 제안 할 수 있습니까?레일스 3 개의 MySQL 관계

답변

0

나는 간단하고 표준 레일 규칙을 따르겠습니다. 키에 자동 ID 필드를 사용하십시오.

코드를 얻기 위해 사용자 개체를 검색 할 필요가 없도록 제품 테이블에 customer_code를 갖고 싶다면 제품을 저장할 때이를 저장하십시오.

0

두 모델이 있다고 생각합니다. CostumerProducts입니다. 그렇다면이 솔루션은 어떨까요? 잡았다에

class Costumer < AR::Base 
    set_primary_key 'code' 

    has_many :products, :foreign_key => :costumer_code 

    validates :code, :presence => true 
end 

class Product < AR::Base 
    belongs_to :costumer, :foreign_key => :costumer_code 
end 

id 키 기본 차와 같은 자동 증가 아니기 때문에 당신이 코드가 제대로 생성에 설정된의 costumers를 보장해야한다는 것입니다. before_create 콜백이 도움이 될 것입니다.

+0

'before_filter'가 아니라'before_create' 또는 'before_save'입니다. 필터가 컨트롤러에 있습니다. – RocketR

+0

네, 맞아요. 물론'before_create' 콜백입니다. –

0
class Product < ActiveRecord::Base 
    belongs_to :customer, :foreign_key => :customer_code, :primary_key => :customer_code 
end