我有一个Rails 4应用程序,有两个模型:校园和状态。园区has_many统计数据和belongs_to园区统计数据。
我遇到的问题是,我可以在show操作中从我的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
校园: Revelstoke
日期: 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提供了一个未定义的方法‘`name
我搞不懂为什么会有这样的差别。我做错了什么?
发布于 2013-07-10 13:21:47
看起来您的数据库中有一个没有关联campus的stat。
要检查是哪一个,您可以转到rails console并检查campus_id属性,打印Stat.all,
如果您正在以编程方式添加统计数据,或者您添加了一个没有每个模型属性的窗体,则可能会发生这种情况。
如果你不希望发生这种情况,你可以在你的模型中使用validates。Check this link。
发布于 2013-07-10 13:20:14
首先,您没有在show操作中初始化@stat,您可以使用:
@stat = Stat.find(params[:id])其次,你必须确保@stat有与之相关的校园。但是,由于您在索引方面没有问题,所以您的stat似乎与campus相关联,这意味着status有一个值是表campuses的有效id的列campus_id。
更新
在阅读您的评论后,您的统计数据没有关联到校园,在这些情况下,您可以使用以下命令显示一个空字符串:
<td><%= stat.campus.try(:name) %></td>https://stackoverflow.com/questions/17562866
复制相似问题