нетерпеливая загрузка с атрибутами в рельсах модели соединения - PullRequest
1 голос
/ 03 февраля 2011

Мое приложение использует ассоциацию: 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», но я получаюответы на вопросы о создании ассоциаций. Мой вопрос на самом деле касается доступа к данным ассоциации после того, как они существуют. Мое приложение использует статические данные, и я не беспокоюсь об обновлении,уничтожить или создать методы.Спасибо за вашу помощь!

1 Ответ

0 голосов
/ 08 февраля 2011

Доступ к данным осуществляется через ассоциацию institu_people. Итак, вы бы сделали что-то вроде:

me = Person.first
rel = me.institutions_people.first

А потом в поле зрения

<%= rel.rel_type %> from <%= rel.institution.name %>

Кроме того, вы можете предоставить себе полный список учреждений вместе с их информацией:

me = Person.first

А потом в представлении:

<% for ip in me.institutions_people %>
  <%= ip.rel_type %> from <%= ip.institution.name %>
<% end %>
...