【发布时间】:2016-01-08 13:35:11
【问题描述】:
我想我可能错过了一些非常明显的东西,但我就是想不通。我正在尝试从 PublicActivity 上的 custom_activity 事件保存的参数中提取 id 和 provider 参数,并将它们传递给我的 Notification 模块并在视图中显示输出。我的问题是我无法从每个活动中获取需要传递给通知的信息。使用当前的设置,我可以获得所有活动,但我只能获得一组要传递的参数。所以.. 我如何设置每个活动 id 并从中获取所需的数据以传递给 Notification::Timeline?
before_action :set_activity, only: :show
def show
@activities = PublicActivity::Activity.order(created_at: :desc).where(recipient_id: current_user.id, recipient_type: 'User')
@post_id = set_activity.parameters[:id]
@provider = set_activity.parameters[:provider]
notify = Notification::Timeline.new(@post_id, @provider, current_user)
@post_entry = notify.construct
@post_entry
end
private
def set_activity
PublicActivity::Activity.where(trackable_type: 'User').find(params[:id])
end
我的路线
resources :activities
get '/notifications/:id', to: 'activities#show'
为了清楚起见,这是一个单一的活动
<PublicActivity::Activity id: 13, trackable_id: 1, trackable_type: "User", owner_id: 1, owner_type: "User", key: "like", parameters: {:id=>"1187467057945665_1220996764592694", :provider=>"github"}, recipient_id: 1, recipient_type: "User", created_at: "2015-10-09 16:23:34", updated_at: "2015-10-09 16:23:34">
另外,我尝试过直接提取数据,但我不确定如何将每个 id 和 provider 值匹配到相应的活动。
# @activities.where(trackable_type: 'User').pluck(:parameters).map do |id| {id: id[:id]} end
# => [{:id=>"1187467057945665_1220988311260206"}, {:id=>"1231979956827708"}, {:id=>"1230071203685250"}, {:id=>"619281766889582596"}, {:id=>"1187467057945665_1220996764592694"}]
# @activities.where(trackable_type: 'User').pluck(:parameters).map do |provider| {provider: provider[:provider]} end
# => [{:provider=>"github"}, {:provider=>"github"}, {:provider=>"github"}, {:provider=>"github"}, {:provider=>"stackoverflow"}]
【问题讨论】:
-
您是否将 id 参数发送到您的索引操作?您设置活动的方式假定 params[:id] 可用。这可能需要改为显示操作。那么,您是手动发送 id 参数吗?
-
我不是。我会试着把结果放出来
-
如果您没有手动提供 id 参数,并且路由没有嵌套,那么提供的代码将永远无法工作,因为您的 set_activity 函数正在根据 params[:id] 查找记录在 index 操作中通常总是 nil。
-
好的。这解决了一个问题。我将所有内容从索引更改为显示,但现在的问题是我只能加载一个:id。回到最初的问题,如何获取每个id,然后获取需要的id和provider,并匹配到对应的activity?我的路线:资源 :activities get '/notifications/:id', to: 'activities#show'
标签: ruby-on-rails ruby ruby-on-rails-4 routes public-activity