Мое приложение использует ассоциацию: has_many: through, и у меня возникают проблемы с поиском наиболее эффективной загрузки и отображения данных с обоих концов ассоциации и самой ассоциации.
Вот мои классы:
class Person < ActiveRecord::Base
has_many :people_ranks
has_many :ranks, :through => :people_ranks
has_many :institutions_people
has_many :institutions, :through => :institutions_people
belongs_to :school
belongs_to :department
end
class Institution < ActiveRecord::Base
has_many :institutions_people
has_many :people, :through => :institutions_people
end
class InstitutionsPerson < ActiveRecord::Base
belongs_to :institution
belongs_to :person
end
и соответствующие им модели:
create_table :people, :force => true do |t|
t.string :name
t.string :degree
t.integer :year_grad
t.integer :year_hired
end
create_table :institutions, :force => true do |t|
t.string :name
t.integer :ischool
end
create_table :institutions_people, :id => false do |t|
t.integer :institution_id
t.integer :person_id
t.string :rel_type
end
Я хочу показать информацию об учреждении человека с помощью @ person.year_hired,@ person.institution.name и @ person.institution.institutions_people.rel_type (где rel_type либо «окончил», либо «нанял» :), но я знаю, что третья часть не будет работать. Использование следующего в бите show вperson_controller:
@person = Person.find(params[:id], :include => [:school, :department, :institutions_people, :people_ranks, {:institutions_people => :institution}, {:people_ranks => :rank}])
дает мне доступ к @ person.institutions и @ person.institutions_people, но как мне связать атрибут rel_type из объединения с отношением человек-учреждение? (Я из PHPи теперь, как построить SQL и перебрать его там, но RoR поставил меня в тупик.)
Я искал помощи в разделах «Стремительная загрузка» и «Связи с: has_many: through», но я получаюответы на вопросы о создании ассоциаций. Мой вопрос на самом деле касается доступа к данным ассоциации после того, как они существуют. Мое приложение использует статические данные, и я не беспокоюсь об обновлении,уничтожить или создать методы.Спасибо за вашу помощь!