如何用咖啡脚本替换对象?

时间:2014-10-08 18:58:14

标签: ruby-on-rails ruby ruby-on-rails-4 coffeescript

我创建用户通知系统并遇到一个问题,我不知道如何刷新我的标题布局上的@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?请帮忙!

1 个答案:

答案 0 :(得分:0)

您无法访问Coffeescript中的实例变量。如果您只需更新部分内容,则可以将附加代码放在与操作对应的视图目录中的文件中,并将其命名为与操作相同。

因此,如果控制器名为foo且操作名为bar,则需要一个名为&#39; bar.js&#39;在&controller;内控制器/ foo /&#39;其中包含附加代码。该文件可以从控制器访问实例变量。如果需要,您也可以从该文件中调用Coffeescript函数,但是您无法直接从Coffeescript文件访问实例变量。