0

customers라는 테이블이 있습니다. 이 테이블에는 두 개의 주소가 있습니다. 작업 중 하나 개 주소와 같은 테이블에 2 개의 foreign 키가있는 일대일 관계 ruby ​​on rails

그 2 개 주소 집

중 하나 direccion 테이블이 주소 전화에 내가 그 두 테이블이

마이그레이션이

class CreateCustomers < ActiveRecord::Migration 
    def change 
    create_table :customers do |t| 
     t.string :name 
     t.integer :address_id #Address of work 
     t.integer :address_id_1 #Address of home 
     t.timestamps 
    end 
    end 
end 

class CreateAdresses < ActiveRecord::Migration 
    def change 
    create_table :adresses do |t| 
     t.string :street 
     t.timestamps 
    end 
    end 
end 
+3

당신은 *** 고객을하려고 많은 주소가? *** 당신이 아칸소 경우 e 주소 테이블에'customer_id'를 추가하고'type [ 'home', 'office']와 같은 플래그를 주면됩니다. – MZaragoza

+0

주소가 별도의 테이블에있는 이유가 있습니까? 대부분 고객의 컨텍스트에서 사용한다면 어쩌면 고객 테이블에 넣을 수 있을까요? – settheline

+0

하지만 직장이나 집 주소를 2 명 또는 3 명의 고객이 공유 할 수 있다면 어떻게됩니까? * – user3678471

답변

0

내가 믿지 않는 방법에 관하여 모르는 속하는 이는 좋은 접근 방식 또는 데이터베이스 설계입니다. 당신은 레일 대회 나가이 방법을 진행하지하려면 두 열 address_idaddress_two_id

customer.rb에를 만드는 기본 레일으로

belongs_to :address, class_name: "Address" 
belongs_to :address_two, class_name: "Address" 

은 외부 키의 이름을 사용 및 컬럼에 저장이 "이름"+ "_ ID가"


더 나은 방법은 두 가지가 Address 모델의 열 customer_id을 가지고있다라고 D

customer.rb

has_many :addresses 

고객 클래스의 관계를 만들고 또한

주소로이 유효성 검사를 추가하여 고객이 더 이상 둘 이상의 주소가 있음을 확인할 수 있습니다. RB

validate :validate_two_addresses 

def validate_two_addresses 
    address_count = Address.where(customer_id: self.customer_id).count 
    errors.add(:base, "You cannot have more than 2 addresses.") unless address_count < 3 
end 
+0

고맙습니다. 잘 돌아갔다. 오사마 첫 번째 멋지지만 두 번째 나를 추천합니다 – user3678471

+0

예 실제로 확장 성 이유로 두 번째 접근 방식을 권하고 싶습니다. 그러나 하나의 주소가 많은 고객을 가질 수있는 일대일 문제가있는 경우 접근하면 좋습니다. –

+0

Mohamed는 유효성 검증 방법을 수행하기 위해 어떻게해야합니까? – user3678471