Стремительная загрузка полиморфных ассоциаций с различными ассоциациями has_one в Rails 2 - PullRequest
2 голосов
/ 20 июня 2010

ActiveRecord выдаёт вам интересную ошибку, когда вы пытаетесь загрузить несуществующую ассоциацию.Это выглядит примерно так:

ActiveRecord::ConfigurationError: Association named 'secondary_complaint' was not found; perhaps you misspelled it?

Теперь, почему, черт возьми, кто-нибудь хотел бы предварительно загрузить несуществующую ассоциацию?Проверьте это.

class Bitchy < ActiveRecord::Base
  has_one :primary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'primary'}
  has_one :secondary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'secondary'}

  has_one :life, :as => :humanoid
end


class Whiny < ActiveRecord::Base
  has_one :primary_complaint, :as => :whiny_bitch, :class_name => 'Complaint', :conditions => {:complaint_type => 'primary'}

  has_one :life, :as => :humanoid
end

class Complaint < ActiveRecord::Base
  belongs_to :whiny_bitch, :polymorphic => true
end

class Life < ActiveRecord::Base
  belongs_to :humanoid, :polymorphic => true
end

# And here's the eager-loading part:
Life.all(:include => {:humanoid => [:primary_complaint, :secondary_complaint]})

У приведенного выше кода есть интересная особенность.Если у вас есть только Bitchy в качестве ваших гуманоидов - это действительно сработает.Однако, как только появляется один Whiny - у вас проблемы.ActiveRecord начинает жаловаться на ошибку, которую я написал выше - Ассоциация с именем 'second_complaint' не найдена.Вы понимаете, почему, верно?Потому что не у каждого гуманоида есть вторичная жалоба.

Есть ли способ заставить ActiveRecord остановить скуку и ныть, когда я пытаюсь загрузить полиморфные ассоциации, которые могут иметь или не иметь определенные ассоциации has_oneприлагается к ним?

1 Ответ

0 голосов
/ 21 июня 2010

Я знаю, что это, вероятно, просто для вашего примера, но вы можете изменить его на has_many :complaints, чтобы они оба имели одинаковую связь, а затем извлечь из этого первичный или вторичный типы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...