복붙노트

[RUBY-ON-RAILS] 액티브, has_many : 통해, 그리고 다형성 협회

RUBY-ON-RAILS

액티브, has_many : 통해, 그리고 다형성 협회

여러분,

확실히 내가 올바르게 이해 만들고 싶어. 그리고 여기에 상속의 경우를 무시하십시오 (SentientBeing) 대신에 has_many에서 다형성 모델에 집중하려고 : 관계를 통해. 말했다, 다음은 고려 ...

class Widget < ActiveRecord::Base
  has_many :widget_groupings

  has_many :people, :through => :widget_groupings, :source => :person, :conditions => "widget_groupings.grouper_type = 'Person'"
  has_many :aliens, :through => :widget_groupings, :source => :alien, :conditions => "video_groupings.grouper_type = 'Alien'"
end

class Person < ActiveRecord::Base
  has_many :widget_groupings, :as => grouper
  has_many :widgets, :through => :widget_groupings
end

class Alien < ActiveRecord::Base
  has_many :widget_groupings, :as => grouper
  has_many :widgets, :through => :widget_groupings  
end

class WidgetGrouping < ActiveRecord::Base
  belongs_to :widget
  belongs_to :grouper, :polymorphic => true
end

완벽한 세상에서 내가 좋아하는 일을 할, 위젯과 사람이 주어진 싶습니다

widget.people << my_person

나는이 작업을 수행 할 때, 나는 '그룹화'의 '유형'을 발견했습니다 항상 widget_groupings에서 null입니다. 그러나 다음과 같은에 나는 경우 :

widget.widget_groupings << WidgetGrouping.new({:widget => self, :person => my_person}) 

모든 내가 일반적으로 예상 한 것처럼 작동합니다. 나는 내가이 아닌 다형성 협회 발생하고 그냥이 뭔가 특정이 사용 사례 또는 I 잠재적 버그를 응시하고있어 경우라면 알고 싶어 본 적이 생각하지 않습니다.

어떤 도움을 주셔서 감사합니다!

해결법

  1. ==============================

    1.이 기능을 나누기 레일 3.1.1 알려진 문제가 있습니다. 이 문제가 첫 번째 시도 업그레이드가있는 경우, 3.1.2에서 수정 된 것

    이 기능을 나누기 레일 3.1.1 알려진 문제가 있습니다. 이 문제가 첫 번째 시도 업그레이드가있는 경우, 3.1.2에서 수정 된 것

    당신은 너무 가까이있어. 소스 옵션 : 문제는 당신이를 남용하고있다. : 다형성 belongs_to 관계에 소스해야 포인트. 당신이 정의하려는 관계 SOURCE_TYPE을 : 그럼 당신이 할 필요가 지정됩니다.

    위젯 모델이 수정 프로그램은 당신이 찾고있는 정확하게 할 수 있도록해야한다.

    class Widget < ActiveRecord::Base
      has_many :widget_groupings
    
      has_many :people, :through => :widget_groupings, :source => :grouper, :source_type => 'Person'
      has_many :aliens, :through => :widget_groupings, :source => :grouper, :source_type => 'Alien'
    end
    
  2. ==============================

    2.위에서 언급 한 바와 같이,이 때문에에 버그로 레일 3.1.1하지 작업을 수행 : 소스 있지만 레일 3.1.2에서 수정 된 것

    위에서 언급 한 바와 같이,이 때문에에 버그로 레일 3.1.1하지 작업을 수행 : 소스 있지만 레일 3.1.2에서 수정 된 것

  3. ==============================

    3.많은 사람들이 있습니다 통해 다형성이 함께 작동하지 않습니다. 당신이 직접 액세스하려고하면 오류가 발생합니다. 내가 잘못 아니에요 경우에, 당신은 손 쓰기 widget.people 푸시 루틴에 있습니다.

    많은 사람들이 있습니다 통해 다형성이 함께 작동하지 않습니다. 당신이 직접 액세스하려고하면 오류가 발생합니다. 내가 잘못 아니에요 경우에, 당신은 손 쓰기 widget.people 푸시 루틴에 있습니다.

    나는 아직 구현되지 않은 뭔가를, 그것은 버그라고 생각하지 않는다. 나는 모든 사람들이 그것을 사용할 수있는 경우가 있기 때문에 우리는이 기능에서 볼 상상.

  4. from https://stackoverflow.com/questions/1683265/activerecord-has-many-through-and-polymorphic-associations by cc-by-sa and MIT license