1

我有一个带有两个模型 Campus 和 Stat 的 Rails 4 应用程序。Campus has_many stats 和 Stat belongs_to Campus。

我遇到的问题是我可以在我的显示操作中从我的 Campus 表中获取数据,但不能在我的索引操作中。这是来自控制器的相关代码。

  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 %>

输出为我提供了一个未定义的方法“名称”,用于 nil:NilClass 用于 stat.campus.name

我无法弄清楚为什么会有差异。我究竟做错了什么?

4

2 回答 2

1

看起来您的数据库中有一个stat与它没有campus关联的对象。

要检查女巫是不是,你可以去rails console检查campus_id属性,打印Stat.all

如果您以编程方式添加统计信息,或者您添加的表单没有每个模型属性,则可能会发生这种情况。

如果您不希望这种情况发生,您可以validates在您的模型中使用。检查此链接

于 2013-07-10T05:21:46.507 回答
0

首先,您没有@stat在显示操作中进行初始化,您可以这样做:

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

其次,你必须确定@stat有与之相关的校园。但是由于您的索引没有问题,因此您的 stat 似乎与校园相关联,这意味着 status 有一个列,该列campus_id的值是 table 的有效 id campuses

更新

阅读您的评论后,您的统计信息与校园无关,您可以在这些情况下显示一个空字符串:

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