3

Ruby on Rails 가이드와 다형성 연관에 대한 질문에 대한 stackoverflow 응답을 읽은 후 해당 사용과 구현을 이해하지만 특정 사용 시나리오에 대해 질문이 있습니다. 나는 (또한 tags 변화 한) 여러 topics, categories, images 및 기타 다양한 모델과 관련된 대신 tags 테이블 내에서 참조 필드 (foreign_id, foreign_type)을 배치의 수 tags을 가지고, 나는 별도을 만들 원합니다 연관 테이블. :polymorphic => true을 사용하여 여전히 가능합니까? 이 같은Separate Polymorphic Association 테이블

뭔가이 가능하지 않은 경우, 나는이 같은 :object_tags 테이블을 생성하고 연결을 강제로 Tag 모델과 다른 모델에서 :conditions를 사용하여 계획되었다

create_table :tags do |t| 
    t.string :name 
    t.remove_timestamps 
end 

create_table :object_tags, :id => false do |t| 
    t.integer :tag_id 
    t.references :tagable, :polymorphic => true 
    t.remove_timestamps 
end 

. 이 작업을 수행하는 레일 방법이 있습니까? 감사! (레일 3.0.9 & 루비 1.8.7 < 작업 - 배포 서버는 여전히 1.8.7을 사용하고 있기 때문에)

UPDATE : 감사 DELBA! Answer은 HABTM 다형성을위한 작업 솔루션입니다.

class Tag < ActiveRecord::Base 
    has_many :labels 
end 

class Label < ActiveRecord::Base 
    belongs_to :taggable, :polymorphic => true 
    belongs_to :tag 
end 

class Topic < ActiveRecord::Base 
    has_many :labels, :as => :taggable 
    has_many :tags, :through => :labels 
end 

create_table :tags, :timestamps => false do |t| 
    t.string :name 
end 

create_table :labels, :timestamps => false, :id => false do |t| 
    t.integer :tag_id 
    t.references :taggable, :polymorphic => true 
end 

UPDATE

: 내가 양방향 HABTM을 필요로하기 때문에, 나는 개별 테이블을 만들어 다시가는 끝났다.

+0

왜 이렇게 가고 싶습니까? (순수한 호기심, 판단 없음) – Damien

+0

각 모델의 연관에 대해 별도의 테이블을 만드는 대신 '태그'에 사용할 수있는 모든 연결을 포함하는 단일 테이블을 만드는 것이 더 효율적입니다. 현재 개인별 연관표를 사용하여 설정하고 있습니다. 귀하의 질문에 대한 답변 저는 실제로 이런 종류의 해결책이 필요 없다는 것을 알고 있습니다. 내가 찾고있는 종류의 설치가 더 많은 메모리를 사용하겠습니까? –

+1

나는 지금도 의견의 시작조차 갖고 있지 않습니다. 나는 다형성 habtm을하는 레일 방법이 있다고 생각하지 않지만, 나는 확실히 그것을 시도해 볼 것입니다. 좋은 질문입니다. Upvoted! 편집 : 그것은 귀하의 질문에 있지만 대답과 함께 잘 모르겠습니다 : http://stackoverflow.com/questions/6964678/habtm-polymorphic-relationship – Damien

답변

1

예, 태그가있는 열은 태그가있는 항목을 가질 수 없으며, 그 반대의 경우도 마찬가지입니다. 당신은 HABT에 대해서 언급했지만 has_and_belongs_to, : polymorphic => 내가 아는 한 사실을 할 수는 없습니다.

create_table :object_tags, :id => false do |t| 
    t.integer :tag_id 
    t.integer :tagable_id 
    t.string :tagable_type 
end 

다른 테이블에는 object_tags, 태그 또는 tagable에 대한 열이 필요하지 않습니다.

class Tag < ActiveRecord::Base 
    has_many :object_tags 
end 

class ObjectTag < ActiveRecord::Base 
    belongs_to :tagable, :polymorphic => true 
    belongs_to :tag 
end 

class Topic < ActiveRecord::Base 
    has_many :object_tags, :as => :tagable 
    has_many :tags, :through => :object_tags 
end