7

Я три модели, каждая из которых имеет следующие ассоциации:Установка: has_many: через ассоциацию на belongs_to ассоциации Ruby On Rails

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 

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

ответ

6

Вы просто создать метод доступа к этому

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 
+0

часть делегирования дает мне эту ошибку: «Делегирование нуждается в цели. Поставьте хэш параметров с помощью: для ввода в качестве последнего аргумента (например, delegate: hello,: to =>: greeter).». Позвольте мне попробовать часть метода – Rohit

+0

Первый способ - это делать добро и решает мою проблему. Но, пожалуйста, найдите некоторые изменения в механизме делегирования и отредактируйте ответ. : D – Rohit

+0

использовать делегат: model3s,: to =>: model1 вместо делегата: model3s,: as =>: model1. : D работает для меня – Rohit

0

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

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 по модели1_id, оставляя модель1 полностью из нее и должна быть более эффективной.

+1

В в общем случае это потеряло бы любые условия, связанные с определениями has_many в Model1. например если Model1 была определена с помощью 'has_many: model2s, -> {where deleted: false}', вы бы не выбрали эти условия без написания дополнительного кода, который был потенциально хрупким и/или подробным. Просто то, что нужно знать. –

Смежные вопросы