我正在使用Public Activity rails gem为我的rails / angular app创建一个活动功能。
我已经跟踪了我的电影模型,
include PublicActivity::Model
tracked owner: -> (controller, model) { controller && controller.current_user }
在我的activity_controller中,
def index
@activities = PublicActivity::Activity.order("created_at desc")
respond_to do |format|
format.json do
render :json => @activities.to_json(include: :owner)
end
end
end
当用户添加电影时,gem会在活动表中创建一个新的可跟踪记录,
create_table "activities", force: :cascade do |t|
t.integer "trackable_id"
t.string "trackable_type"
t.integer "owner_id"
t.string "owner_type"
t.string "key"
t.text "parameters"
t.integer "recipient_id"
t.string "recipient_type"
t.datetime "created_at"
t.datetime "updated_at"
end
我的activity_controller的输出如下所示,
{"id":3,"trackable_id":6,
"trackable_type":"Movie",
"owner_id":1,
"owner_type":"User",
"key":"movie.create",
"parameters":{},
"recipient_id":null,
"recipient_type":null,
"created_at":"2015-12-30T12:31:24.765Z",
"updated_at":"2015-12-30T12:31:24.765Z",
"owner":{
"id":1,
"email":"jon@doe.nl",
"name":"Jon Doe"
}
}
我想添加已添加到此记录中的电影数据。
因此,例如,当我添加电影Creed时,活动记录将如下所示,
{"id":3,"trackable_id":6,
"trackable_type":"Movie",
"owner_id":1,
"owner_type":"User",
"key":"movie.create",
"parameters":{},
"recipient_id":null,
"recipient_type":null,
"created_at":"2015-12-30T12:31:24.765Z",
"updated_at":"2015-12-30T12:31:24.765Z",
"owner":{
"id":1,
"email":"jon@doe.nl",
"name":"Jon Doe"
},
"movie":{
"id":1,
"title":"Creed",
"release_date":"2016-01-21"
}
}
这可以以某种方式完成吗?
在railscast tutorial Ryan可以输出有关此活动的数据。
<%= render_activity activity %>
我发现通过在我的电影模型中使用此代码,我可以在活动记录中添加一个参数。
tracked :params => {
:title => "Creed",
}
现在,当我添加新电影(和新活动)时,它会将其添加到控制器
"parameters":{"title":"Creed"}
当然这是硬编码的,它应该是电影对象的标题。此外,这看起来不是一个好方法。因为我正在复制数据。
答案 0 :(得分:0)
public_activity gem记录您对“跟踪”模型所采取的操作,然后使用活动模型中的:trackable符号引用此模型。
在您的情况下,正在“跟踪”电影模型,可以使用:trackable符号在to_json调用中访问它。
render json: @activities.to_json(include: [:owner, :trackable])
这将返回将活动呈现为json对象,如下所示:
{"id":3,"trackable_id":6,
"trackable_type":"Movie",
"owner_id":1,
"owner_type":"User",
"key":"movie.create",
"parameters":{},
"recipient_id":null,
"recipient_type":null,
"created_at":"2015-12-30T12:31:24.765Z",
"updated_at":"2015-12-30T12:31:24.765Z",
"owner":{
"id":1,
"email":"jon@doe.nl",
"name":"Jon Doe"
},
"trackable":{
"id":1,
"title":"The Godfather",
"release_date":"2016-01-21"
},
"trackable_id":
}
请注意,电影存储在“可跟踪”键下,而不是“电影”下。