我使用Public Activity gem为我的rails / angular应用程序构建了一个活动流,并且我已经建立了一个跟随系统,用户可以相互关注。因此,当当前用户关注的用户执行操作(将电影添加到他的监视列表)时,它将创建活动记录,并且该活动将在当前用户中显示其活动流。我想通知当前用户有一项新活动。
要显示我创建了一个图标的活动,
%i.fa.fa-bell{"ui-sref" => "home.activities"}
我希望在有新活动的时候给这个图标另一个类,比如newActivities
。
所以我必须区分旧消息和新消息。为此我想在活动表中添加一个名为viewed
的列。创建新活动时,viewed
列为空。当点击显示活动的图标时,它会向viewed
列添加一个值。
在角度方面,我将浏览一下活动范围(包含所有当前用户活动),查看是否存在空viewed
值的活动,如果是,请添加.newActivities
类到图标。
或者是否有更简单,或更好的方法来实现这一结果?
答案 0 :(得分:0)
也许有人来这个问题,或者有人可以改进我的方法。但是,让我告诉你我做了什么。
首先,我在我的活动模型中创建了一个viewed
字符串,
class AddViewedToActivities < ActiveRecord::Migration
def change
add_column :activities, :viewed, :string
end
end
然后我将默认设置为'取消选中'
class AddDefaultToViewedInActivities < ActiveRecord::Migration
def change
change_column_default(:activities, :viewed, 'uncheck')
end
end
运行db:migrate等。
然后在Angular方面,我创建了一个活动控制器,
activitiesService.loadActivities().then(function(response) {
$scope.activities = response.data;
var activities = $scope.activitie
var init = function(){
var hasValue = activities.some(function(obj) { return obj.viewed == "uncheck" });
if (hasValue == true){
checked = true ;
$scope.newActivities = 'newActivities'
}
}
$scope.viewActivities = function (){
angular.forEach(activities, function (activitie) {
if (activitie.viewed == 'uncheck'){
viewActivities.update({
viewed: `check`,
id: activitie.id
}).then(init);
}
});
$scope.newActivities = '';
}
init();
})
init函数检查是否存在等于“取消选中”的对象。如果这是真的,它会将类“newActitivites”添加到$ scope.newActivities` ng-class(显示是否有新消息的图标)
$ scope.viewactivities is a function that fires when a user checks his new activities. It checks each activitie and finds the new ones, with the value of
取消选中。然后它会通过检查更新该记录,以便下次用户返回时,他的所有活动都已经过检查,图标也不会改变。
为了完成,这里是活动服务,
app.factory('viewActivities', ['$http', function($http) {
return {
update: function(activitie) {
return $http.put('/activities/' +activitie.id + '.json', activitie);
}
};
}])
rails中的活动控制器,
def update
@activity = PublicActivity::Activity.find(params[:id])
@activity.update_attributes(activity_params)
redirect_to :root
end
你必须在你的路线中设置它,
resources :activities, only: [:create, :destroy, :index, :show, :update, :put]