Установка A: HAS_MANY: через ассоциацию на принадлежащей ассоциации ruby ​​на рельсах

StackOverflow https://stackoverflow.com/questions/3864143

Вопрос

У меня есть три модели, каждый из которых имеет следующие ассоциации:

class Model1 < ActiveRecord::Base
  has_many :model2s
  has_many :model3s
end

class Model2 < ActiveRecord::Base
  belongs_to :model1
  has_many :model3s, :through => :model1  # will this work? is there any way around this?
end

class Model3 < ActiveRecord::Base
  belongs_to :model1
  has_many :model2s, :through => :model1  # will this work? is there any way around this?
end

Как вы можете видеть в прокомментированном тексте, я упомянул то, что мне нужно.

Это было полезно?

Решение

Вы просто создаете метод для доступа к нему

class Model2 < ActiveRecord::Base
  belongs_to :model1

  def model3s
    model1.model3s
  end
end

Или вы можете делегировать для Model1 метод Model3S

class Model2 < ActiveRecord::Base
  belongs_to :model1

  delegate :model3s, :to => :model1

end

Другие советы

Почему бы не попробовать:

class Model1 < ActiveRecord::Base
  has_many :model2s
  has_many :model3s
end

class Model2 < ActiveRecord::Base
 belongs_to :model1
 has_many   :model3s, :primary_key => :model1_id,
                      :foreign_key => :model1_id

end

class Model3 < ActiveRecord::Base
  belongs_to :model1
  has_many   :model2s, :primary_key => :model1_id,  
                       :foreign_key => :model1_id
end

Это будет иметь активную запись Model2 и Model3 Model1_D_ID, выходя из модели1, полностью из них, и должна быть более эффективной.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top