0

次の方法で関連付けられた 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 %>

ただし、ページの読み込みに時間がかかるため、ループごとに 2 つのルックアップを行わずに関連データを表示する簡単な方法があるかどうか疑問に思っています。次のような組み込みの参照 Rails スタイルを使用して、関連するデータを表示することができませんでした。

f.GMarker.first.marker

しかし、コンソールでそれを試みるたびに、次のようなエラーが大量に発生します

NameError: uninitialized constant Genotype::Gmarkers

モデル間に一対多の関係があるため、コンソールがGmarkerについて知らない理由がわかりません....

どんな助けでも大歓迎です!

--リック

4

1 に答える 1

0

Genotype クラスで、begs_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>
于 2012-07-31T03:31:35.847 に答える