我创建用户通知系统并遇到一个问题,我不知道如何刷新我的标题布局上的@activities) 我有这个:
application_controller.rb
before_filter :activity
def track_activity(user, trackable, action = params[:action], author = current_user)
Activity.create! user: user, trackable: trackable, action: action, author: author
PrivatePub.publish_to("/messages/new", cool: activity)
end
def activity
if signed_in?
@activities = current_user.activities.includes(:author, :trackable).order(created_at: :desc)
end
end
布局/ _header.html.erb
<div class="user-notification">
<a class="fa fa-life-ring fa-lg" href="javascript:void(0);" tabindex="1"></a>
<div class="activity activity_open" id="activity">
<% @activities.each do |activity| %>
<%= link_to activity.user.name, activity.user %>
<%= render "activities/#{activity.trackable_type.underscore}/#{activity.action}", activity: activity %>
<% end %>
<%= subscribe_to "/messages/new" %>
</div>
</div>
Javascript角/ messages.js.coffee
PrivatePub.subscribe "/messages/new", (data, channel) ->
alert $("#activity").append("<%= data.cool = @activities %>");
但警报显示[object Object]
我如何更新@activities?请帮忙!
答案 0 :(得分:0)
您无法访问Coffeescript中的实例变量。如果您只需更新部分内容,则可以将附加代码放在与操作对应的视图目录中的文件中,并将其命名为与操作相同。
因此,如果控制器名为foo且操作名为bar,则需要一个名为&#39; bar.js&#39;在&controller;内控制器/ foo /&#39;其中包含附加代码。该文件可以从控制器访问实例变量。如果需要,您也可以从该文件中调用Coffeescript函数,但是您无法直接从Coffeescript文件访问实例变量。