1

Campus と Stat の 2 つのモデルを持つ Rails 4 アプリがあります。キャンパスには_多くの統計があり、統計はキャンパスに属しています.

私が抱えている問題は、Campus テーブルのデータを show アクションで取得できますが、index アクションでは取得できないことです。コントローラーからの関連コードを次に示します。

  def index
    @stats = Stat.all
  end

  def show
  end

ここに私のshow.html.erbがあります:

<p id="notice"><%= notice %></p>
<p>
  <strong>Attendance:</strong>
  <%= @stat.attendance %>
</p>
<p>
  <strong>Salvations:</strong>
  <%= @stat.salvations %>
</p>
<p>
  <strong>Visitors:</strong>
  <%= @stat.visitors %>
</p>
<p>
  <strong>Offering:</strong>
  <%= @stat.offering %>
</p>
<p>
  <strong>Campus:</strong>
  <%= @stat.campus.name %>
</p>
<p>
  <strong>Date:</strong>
  <%= @stat.date %>
</p>
<%= link_to 'Edit', edit_stat_path(@stat) %> |
<%= link_to 'Back', stats_path %>

以下を出力します。

出席: 23

救い: 0

訪問者: 3

オファリング: 5000.0

キャンパス: レベルストーク

日付: 2013-07-05

編集 | 戻る

私のindex.html.erbの関連部分は次のとおりです。

<% @stats.each do |stat| %>
  <tr>
    <td><%= stat.attendance %></td>
    <td><%= stat.salvations %></td>
    <td><%= stat.visitors %></td>
    <td><%= stat.offering %></td>
    <td><%= stat.date %></td>
    <td><%= stat.time %></td>
    <td><%= stat.campus.name %></td>
    <td><%= link_to 'Show', stat %></td>
    <td><%= link_to 'Edit', edit_stat_path(stat) %></td>
    <td><%= link_to 'Destroy', stat, method: :delete, data: { confirm: 'Are you sure?' } %></td>
  </tr>
<% end %>

出力には、stat.campus.name の nil:NilClass の未定義のメソッド「名前」が表示されます

なぜ違うのか理解できません。私は何を間違っていますか?

4

2 に答える 2

1

データベースに関連付けられていstatないがあるようです。campus

魔女がそれであるかどうかを確認するには、に移動してプロパティrails consoleを確認できます。campus_idStat.all

これは、統計情報をプログラムで追加している場合、またはすべてのモデル プロパティなしでフォームを追加した場合に発生する可能性があります。

それが発生したくない場合validatesは、モデルで使用できます。このリンクを確認してください

于 2013-07-10T05:21:46.507 に答える
0

まず、@statshow アクションで初期化していません。これを行うには、次のようにします。

@stat = Stat.find(params[:id])

次に、@statキャンパスが関連付けられていることを確認する必要があります。ただし、インデックスに問題がないため、統計にキャンパスが関連付けられているようです。これは、ステータスcampus_idにテーブルの有効な ID である列があることを意味しますcampuses

アップデート

コメントを読んだ後、統計にキャンパスが関連付けられていない場合、次の場合に空の文字列を表示できます。

  <td><%= stat.campus.try(:name) %></td>
于 2013-07-10T05:20:13.610 に答える