1

我正在使用 public_activity gem 来跟踪我的 Reposts 模型的更改,该模型包含一个 comment_id 和 belongs_to Comments 表。在Repost 的创建操作的_create.html.erb部分中,我可以使用此代码而不会出现错误:

<%= activity.trackable.comment %>

并且视图将显示以下文本:

Comment:0x00000004508ee0>

这证明它使用我在转发和评论之间建立的关系来显示 Activerecord。但是,一旦我尝试扩展代码以在 Comments 表上显示内容字段,我就会收到错误消息。例如:

<%= activity.trackable.comment.content %> 

返回以下错误:

undefined method 'content' for nil:NilClass

activity.trackable.comment 似乎拉到了正确的记录。我该如何扩展它,它不仅可以通过已建立的关系提取记录,而且还可以从该表中提取另一个字段?

谢谢!

编辑 1:views/public_activity/_create.html.erb的完整视图

<% if activity.trackable %>
  <%= link_to activity.trackable.comment, activity.trackable.comment %>
  <% else %>
  which has since been removed
<% end %>

编辑 2:根据 Leo 的帮助,我所要做的就是检查零。这是我必须将代码更改为:

<% if activity.trackable && activity.trackable.comment.present? %>
 <%= link_to activity.trackable.comment.content, activity.trackable.comment %>
  <% else %>
  which has since been removed
<% end %>

如果您像我一样遵循 public_activity Railscast ,我强烈建议添加额外的代码来检查nil 。

4

2 回答 2

1

因此,根据这个特定的问题,似乎activity.trackable.comment正在为某些活动返回一个NilClass对象,从而导致引发异常。

当然,解决方法是通过执行以下操作来检查以确保comment不是 nil

<% if activity.trackable && activity.trackable.comment.present? %>
 <%= link_to activity.trackable.comment.content, activity.trackable.comment %>
  <% else %>
  which has since been removed
<% end %>
于 2013-06-06T22:32:42.497 回答
0

似乎您正在访问错误的对象以从中获取计数。我过去曾使用过该impressionist_count方法来完成此类任务,此处的文档可能会对您有所帮助。

于 2013-06-06T03:26:59.193 回答