获取未定义的方法模型跟踪Public_Activity Gem

时间:2013-10-24 21:23:08

标签: ruby-on-rails

我正在浏览公共活动的轨道广播

http://railscasts.com/episodes/406-public-activity?view=asciicast

在view / activities / index.html

我在index.html中有这个

<% @activities.each do |activity| %>
  <div class="activity">
  <%= link_to activity.owner.company_name, activity.owner if activity.owner %>
  added a job <%= link_to activity.trackable.job.title, activity.trackable.job %>
  </div>
<% end %>

我有工作模式和公司模式

我在job.rb模型中有这个

include PublicActivity::Model
tracked owner: Proc.new{ |controller, model| controller.current_company }

这是我的活动索引控制器方法

def index
    @activities = PublicActivity::Activity.order_by(:created_at.desc)
  end

我正在

undefined method `job' for #<Job:0x007fda6e0384c8>

所以这部分不起作用

<%= link_to activity.trackable.job.title, activity.trackable.job %>

但有趣的是它在我做的时候有用

<%= activity.inspect %>

<%= link_to activity.owner.company_name, activity.owner if activity.owner %>

以下是我活动的一条记录

#<PublicActivity::Activity _id: 526981707242c02d96000006, created_at: 2013-10-24 20:22:08 UTC, updated_at: 2013-10-24 20:22:08 UTC, trackable_type: "Job", trackable_field: nil, trackable_id: "526981707242c02d96000005", owner_type: "Company", owner_field: nil, owner_id: "5268454701e6af3eb9000003", recipient_type: nil, recipient_field: nil, recipient_id: nil, key: "job.create", parameters: {}, _type: "PublicActivity::Activity">

您可以看到公共活动正在跟踪作业模型。轨道广播的日期是在二月份,我在宝石文档中找不到“可追踪”,它是否已经更新,你必须采取另一种方式吗?

如果它有助于我使用设计公司模型

已更新,已请求

当我这样做时

 <%= activity.trackable %>

在我的views / activities / index.html中我得到了这个

#<Job:0x007f882f47a248> #<Company:0x007f882f608a10> #<Company:0x007f882e0a4250> #<Job:0x007f882e0ac7c0> #<Job:0x007f882e0f6d98> #<Job:0x007f882e3d0eb0> #<Company:0x007f882e6319e8> #<Company:0x007f882e09ab60> #<Company:0x007f882e0ef0e8> #<Company:0x007f882e1c9658> #<Company:0x007f882e1979a0> #<Job:0x007f882e77b038> #<Company:0x007f882f612c90> #<Company:0x007f882ca7ffb0> #<Company:0x007f882f25dcd0> #<Job:0x007f882f267cf8> #<Company:0x007f882f2af148> #<Company:0x007f882c9d3648> #<Company:0x007f882c9d6f78> #<Job:0x007f882f5381a8> #<Job:0x007f882c999790> #<Job:0x007f882bd1e510> #<Job:0x007f882f121ad8> #<Job:0x007f882ca49208> #<Job:0x007f882c82c420> #<Job:0x007f882c921920> #<Job:0x007f882c923db0> #<Company:0x007f882c9ac318> #<Company:0x007f882c86f568> #<Job:0x007f882c872420> #<Job:0x007f882ca15a98> #<Job:0x007f882ca17d48> #<Job:0x007f882ca5eec8> #<Job:0x007f882ca698c8> #<Job:0x007f882c9c4328> #<Job:0x007f882c9c7460> #<Job:0x007f882c99f960> #<Job:0x007f882c9a2548> #<Job:0x007f882b379500> #<Company:0x007f882b37bd00> #<Company:0x007f882b386bd8> #<Job:0x007f882b388118> #<Company:0x007f882d057e88> #<Company:0x007f882e0af6c8> #<Company:0x007f882b0d9098> #<Company:0x007f882ca508f0> #<Company:0x007f882c9e36d8> #<Company:0x007f882ca6f6b0> #<Job:0x007f882b180848> #<Job:0x007f882b15e798> #<Company:0x007f882b1613f8> #<Company:0x007f882b1035a0> #<Company:0x007f882b185f28> #<Company:0x007f882f110530>

当我这样做时<%= activity.owner %>

我收到了这个输出

#<Company:0x007f882c9322c0> #<Company:0x007f882c93d558> #<Company:0x007f882c940578>

由于我正在跟踪公司模型的变化,我也有这个

include PublicActivity::Model
tracked

我认为一切都很好,但我无法将我的活动中的工作记录绘制到视图中?

更新

我正在使用mongoid,这是我的job.rb模型

class Job


    include Mongoid::Document
    include Mongoid::Timestamps

    include PublicActivity::Model
        tracked owner: Proc.new{ |controller, model| controller.current_company }

    field :title 
    field :description
    field :skills
    field :education
    field :location

    belongs_to :company

end 

3 个答案:

答案 0 :(得分:3)

我是public_activity的创造者。

此:

activity.trackable.job.title

肯定是错误的,因为您在job对象上调用Job方法,这没有意义。 trackable是您的Job对象。

确保该titlejob属性,因为它看起来像您的作业模型有问题,而不是p_a的可跟踪关系。

答案 1 :(得分:1)

不熟悉gem,但看起来trackable映射到多态连接中的job对象。链接工作可能没有必要。

<%= link_to activity.trackable.title, activity.trackable %>

答案 2 :(得分:1)

不确定你是否解决了这个问题,但在我开始检查可追踪之前,我遇到了完全相同的问题。与d_ethier的答案类似,要解决此问题,请替换

<%= link_to activity.trackable.job.title, activity.trackable.job %>

<%= link_to activity.trackable.title, activity.trackable %>

要测试您还可以显示以下内容

<%= activity.trackable.inspect %>

如果检查可跟踪功能不显示您的模型标题,则表示您在public_activity之外存在问题。