2013-06-06 3 views
1

Я использую камень public_activity для отслеживания изменений с помощью моей модели Reposts, которая содержит комментарий_ид и принадлежит таблице комментариев. В _create.html.erb частичного для создания действия REPOST, я могу использовать этот код без ошибок:Показать значение activity.trackable with public_activity Rails gem

<%= activity.trackable.comment %> 

и вид будет отображать этот текст:

Comment:0x00000004508ee0> 

Каких доказывает, что он отображает Activerecord, используя отношения, которые я установил между Reposts и Comments. Однако, как только я попытаюсь расширить код, чтобы показать поле содержимого в таблице комментариев, я получаю сообщение об ошибке. Например:

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

Возвращает следующее сообщение об ошибке:

undefined method 'content' for nil:NilClass 

activity.trackable.comment кажется тянуть правую запись. Как я могу продлить это, так что он не только вытягивает запись через установленную связь, но также вытягивает другое поле из этой таблицы?

Спасибо!

EDIT 1: Полный вид на просмотров/public_activity/_create.html.erb

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

EDIT 2: На помощь Лео, все, что я должен был сделать чек на ноль. Вот что я должен был изменить мой код:

<% 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, как я сделал.

+1

Вы итерация по списку мероприятий? Есть ли вероятность, что 'trackable.comment 'возвращает объект nil? –

+0

Спасибо за ответ Лев. Я опубликовал весь код частичного просмотра. Это влияет на все действия, перечисленные на странице, но поле заполняется для всех строк в базе данных. Пустые поля не должны вызывать проблему – winston

+1

Где находится переменная 'activity'? Мне кажется, что он должен работать нормально, выбор объекта отношений 'comment' должен позволить вам получить свои поля по умолчанию, если вы не укажете его не ... что происходит, так это то, что activity.trackable.comment возвращает объект nil , Поэтому 'comment' не является объектом AR. Вот почему я спросил, повторяете ли вы действия, а что нет. –

ответ

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

Кажется, что вы получаете доступ к неправильному объекту, чтобы получить счет. Я использовал метод impressionist_count для такого рода задач в прошлом, документация here может вам помочь.

+1

Кажется, он не получает счет. Он пытается к содержанию комментария. Просто кажется, что объект Comment, возвращенный public_activity, равен нулю в его случае. –

Смежные вопросы