0

我有一个使用 PublicActivity gem 跟踪的帖子模型,如下所示

class Post < ActiveRecord::Base
  include PublicActivity::Model
  tracked except: :destroy, owner: ->(controller, model) { controller && controller.current_user }

这是有关 gem 的更多信息的链接:https ://github.com/pokonski/public_activity

在 Post 表中,我拥有的属性之一是“讨论”。

create_table "posts", :force => true do |t|
    t.text     "content"
    t.integer  "user_id"
    t.datetime "created_at",                         :null => false
    t.datetime "updated_at",                         :null => false
    t.boolean  "discussion",          :default => false
  end

如果讨论 == true,我想在 PublicActivity 流中显示不同类型的文本消息。

现在,我正在使用它来查看所有帖子

<li>

  <% if activity.trackable_type == "Post" %>
    <%= link_to activity.owner.name, activity.owner if activity.owner %> posted new content <span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% else %>
   <%= link_to activity.owner.name, activity.owner if activity.owner %> made a comment on a post<span class="timestamp"> <%= time_ago_in_words(activity.created_at) %> ago.
  </span>
  <% end %>
</li>

这是上面视图的控制器

class ActivitiesController < ApplicationController
  def index
    @activities = PublicActivity::Activity.order("created_at desc")
  end
  end

我想包含一种新类型的视图消息,其中显示“用户创建了一个新讨论”,它基于 post 表中属性的布尔值。这可能吗?

4

1 回答 1

2

activity.trackable将给出正在跟踪的模型。它是一个多态关联。

假设用户创建了一个新帖子,并且讨论设置为 true。在这种情况下activity.trackable,会给你 Post 模型对象,它的所有方法都会正常工作,所以你activity.trackable.discussion会给你true/false,根据我说的例子,它会返回true

在你看来,你可以做这样的事情

<% if activity.trackable.discussion %>
  User created a discussion
<% else %>
  User created a post
<% end %>

希望有帮助。

于 2013-07-09T06:39:49.953 回答