显示关联数据的最佳方式是什么?

时间:2012-07-17 19:32:53

标签: ruby-on-rails-3

我有3个模型,基因型,Gmarkers和Gsamples,以下列方式关联:

class Genotype < ActiveRecord::Base
  attr_accessible :allele1, :allele2, :run_date
  belongs_to :gmarkers
  belongs_to :gsamples
end

class Gmarker < ActiveRecord::Base
  attr_accessible :marker
  has_many :genotypes, :dependent => :delete_all  
end

class Gsample < ActiveRecord::Base
  attr_accessible :box, :labid, :subjectid, :well
  belongs_to :gupload
  has_many :genotypes, :dependent => :delete_all
end

当我显示Gentypes列表时(在index.html.erb中),我将按以下方式显示相关数据:

<% @genotypes.each do |f| %>
  <tr>    
    <td><%= Gmarker.find(f.gmarkers_id).marker %></td>
    <td><%= Gsample.find(f.gsamples_id).labid %></td>
    <td><%= f.allele1 %></td>
    <td><%= f.allele2 %></td>
    <td><%= f.run_date %></td>
    <td><%= link_to 'Show', f %></td>
    <td><%= link_to 'Edit', edit_genotype_path(f) %></td>
    <td><%= link_to 'Destroy', f, confirm: 'Are you sure?', method: :delete %></td>
  </tr>
<% end %>

然而,该页面需要一段时间才能加载,所以我想知道是否有更简单的方法来显示相关数据而不需要为每个循环执行两次查找。我无法使用内置的参考Rails样式显示任何相关数据:

f.GMarker.first.marker

但每当我在控制台中尝试时,我会从

开始出现一系列错误
NameError: uninitialized constant Genotype::Gmarkers

我不明白乳清控制台不了解Gmarkers,因为他们的模型之间存在一对多的关系......

非常感谢任何帮助!

- 瑞克

1 个答案:

答案 0 :(得分:0)

在Genotype类中,将belongs_to声明更改为:

  belongs_to :gmarker
  belongs_to :gsample

然后在您的视图(index.html.erb)上,替换以下代码:

<td><%= Gmarker.find(f.gmarkers_id).marker %></td>
<td><%= Gsample.find(f.gsamples_id).labid %></td>

这一个:

<td><%= f.gmarker.marker %></td>
<td><%= f.gsample.labid %></td>