我的应用使用了:has_many:通过关联,我无法弄清楚如何最有效地加载和显示来自关联两端和关联本身的数据。
以下是我的课程:
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是&#34;毕业&#)来显示一个人的机构信息。 34;或&#34;雇用:),但我知道第三部分不会工作。在person_controller中的show位中使用以下内容:
@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属性连接到person-institution关系? (我来自PHP,现在如何构建SQL并在那里循环,但是RoR让我感到难过。)
我已经在#34; eager loading&#34;下寻求帮助。和&#34;关联:has_many:通过&#34;,但我得到了关于构建关联的答案。我的问题是关于在关联数据存在后访问该数据。我的应用程序使用静态数据,我并不担心更新,销毁或创建方法。谢谢你的帮助!
答案 0 :(得分:0)
访问数据的方式是通过institutions_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 %>