我有一个Rails 4应用程序,有两个型号Campus和Stat。 Campus has_many stats和Stat belongs_to Campus。
我遇到的问题是我可以在我的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提供了一个未定义的方法`name':stat.campus.name的NilClass
我无法弄清楚为什么会有区别。我做错了什么?
答案 0 :(得分:1)
您的数据库中似乎有一个stat
与campus
没有关联。
要查看其中的一个,您可以转到rails console
并查看campus_id
属性,打印Stat.all
,
如果您以编程方式添加统计信息,或者您添加的表单没有每个模型属性,就会发生这种情况。
如果您不希望这种情况发生,可以在模型中使用validates
。 Check this link
答案 1 :(得分:0)
首先,你没有在show action中初始化@stat
,你可以这样做:
@stat = Stat.find(params[:id])
其次,您必须确保@stat
校园与校园相关联。但是,由于您没有索引问题,您的统计信息似乎与校园相关联,这意味着状态有一列campus_id
,该值是表campuses
的有效ID。
在阅读您的评论后,您的统计信息没有与校园相关联,您可以在以下情况下显示空字符串:
<td><%= stat.campus.try(:name) %></td>