1

私は public_activity gem を使用して Reposts モデルで変更を追跡しています。Repost の create アクションの_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: レオの支援により、私がしなければならなかったのは、nil をチェックすることだけでした。コードを次のように変更する必要がありました。

<% 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 に答える