[ruby-on-rails] ActiveRecord, has_many: through и Полиморфные ассоциации


Answers

Как упоминалось выше, это не работает с рельсами 3.1.1 из-за ошибки на: source, но исправлено в Rails 3.1.2

Question

Folks,

Хотите, чтобы я правильно понял это. И, пожалуйста, обратите внимание на случай для наследования здесь (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

Однако, когда я это делаю, я заметил, что тип «grouper» всегда имеет значение null в widget_groupings. Однако, если я что-то вроде следующего:

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

Тогда все работает так, как я обычно ожидал. Я не думаю, что когда-либо видел, что это происходит с не полиморфными ассоциациями, и просто хотел знать, было ли это что-то конкретное для этого варианта использования или я потенциально смотрю на ошибку.

Спасибо за любую помощь!




Links