使用public_activity Rails gem显示activity.trackable的值

时间:2013-06-06 01:40:45

标签: ruby-on-rails-3

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

<%= activity.trackable.comment %>

并且视图将显示此文本:

Comment:0x00000004508ee0>

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

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

我强烈建议您添加其他代码以检查 nil ,如果您按照我的方式执行public_activity Railscast。

2 个答案:

答案 0 :(得分:1)

因此,对于这个特定问题,activity.trackable.comment正在为某些活动返回NilClass对象,从而导致抛出异常。

当然,修复方法是通过执行以下操作来检查comment是否为零

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

答案 1 :(得分:0)

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