.trackable上的公共活动的未定义方法错误

时间:2014-07-10 19:17:24

标签: ruby-on-rails ruby-on-rails-4 public-activity

我一直在关注名为“公共活动”的Railscast视频。我已经陷入了以下错误:

undefined method `post'

当我尝试输出已创建的帖子时会发生这种情况。

我的部分看起来像这样:

_create.html.erb

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

我可以看到我的活动表实际上存储了所有新帖子,并创建了正确的owner_id, trackable_type 发布,带有密钥的 Post.create

我的post.rb模型如下所示:

class Post < ActiveRecord::Base
 include PublicActivity::Model
 tracked owner: Proc.new{ |controller, model| controller.current_user }

 belongs_to :user
 has_many :comments, dependent: :destroy
end

这是我的活动流( newsfeeds / index.html.erb

<h2>Stream</h2>
 <% @activities.each do |activity| %>
 <%= link_to activity.owner.fullname, root_url %> 
 <%= render_activity activity %>
<% end %>

当我删除部分内容时。我成功打印出了'owner.fullname&#39;作为旁注。

我的 newsfeeds_controller.rb

class NewsfeedsController < ApplicationController
 def index
    @activities = PublicActivity::Activity.order("created_at desc").where(owner_id: current_user.friend_ids, owner_type: "User")
 end 

 def show
 end 
end

我想做的事情与他在Railscast上尝试做的几乎一样。我希望打印出帖子的标题。

我的帖子有:标题和:内容

1 个答案:

答案 0 :(得分:2)

我设法弄清楚了。问题在于:

link_to activity.trackable.post.title 

我实际上是用清晰的代码问这个:

link_to activity.trackable.post.post.title

因为可跟踪存储模型,在这种情况下发布。所以我不必写它。我只需删除它并在最后添加“标题”。因此我称之为post.title。

正确和有效的方式是:

link_to activity.trackable.title