2013-11-26 5 views
0

belongs_to 협회 :다형성 협회 나 I이 경우 다형성 연관을 사용하고

class Adress < ActiveRecord::Base 
    belongs_to :addressable, polymorphic: true 
end 

class User < ActiveRecord::Base 
    has_many :addresses, as: :addressable 
end 

은 내가 지금 원하는 것은 집 주소와 직장 주소를 가지고있는 사용자입니다.

class User < ActiveRecord::Base 
    has_one :home_address, as: :addressable 
    has_one :work_address, as: :addressable 
end 

을하지만 그때 나는 집 주소이고 어느 것이 직장 주소 인 하나 모르겠다 : 내가있을 수 있었다.

어떻게하면됩니까?

답변

0

테이블이 Addresses 인 경우 Addresses 테이블에 하나의 필드를 'addressable_type'으로 유지하십시오. 다른 주소를 식별 할 수있을 것입니다.

t.integer :addressable_id 
t.string :addressable_type 

(간체) 버전

어느 당신이 당신의 주소 테이블에서 이러한 필드를 가질 수 :

t.references :addressable, polymorphic: true 

감사

+0

예,하지만 addressable_type은 "User"클래스이므로 저장하지 못합니다. 어쨌든, 도와 줘서 고마워. –

+1

addressable_type은 관련 객체의 클래스를 다형성 관계로 저장하는 필드의 표준 이름입니다. "직장", "집", "모바일"등을 저장할 수있는 "카테고리"또는 다른 항목을 추가해야합니다. –

0

당신은 STI를 설정할 수 있습니다. 주소 모델에 type 열을 만들어야합니다.

class Adress < ActiveRecord::Base 

end 

class WorkAddress < Address 
    belongs_to :user 
end 

class HomeAddress < Address 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_one :work_address 
    has_one :home_address 
end 
+0

나에게 아주 좋은 해결책이있는 것처럼 보입니다. 나는 그것을 시도 할 것이다. 고마워요. –

+0

@GustavoLobo 문제 없습니다. 이것이 당신을위한 대답이라면 올바른 것으로 받아 들여주세요. 많은 감사합니다! – veritas1

+0

실제로 Address 테이블에 저장되는 내용이 User 클래스입니다. 어쨌든 고맙습니다. –

관련 문제