将值设置为对象

时间:2016-01-05 11:16:33

标签: ruby-on-rails angularjs

我的活动模型有viewed列。默认情况下,viewed列的值为null。我尝试创建一个函数,将viewed列的值设置为viewed,而不是null

我有一个角度函数,

var activities = $scope.activities
$scope.viewActivities = function (){
  angular.forEach(activities, function (activitie) {
    viewActivities.create({
      viewed: `viewed`
    })
  });
}

这将为活动变量中的每个对象调用viewActivities.create函数。

这是viewActivities.create服务,

app.factory('viewActivities', ['$http', function($http) {
  return {
    create: function(activitie) {
      return $http.post('/activities.json', activitie);
    }
  };
}])

当我运行此代码时,我收到404错误。当我检查我的rails控制台时,它显示,

  

开始POST" /activities.json"对于127.0.0.1在2016-01-05 12:06:31 +0100   AbstractController :: ActionNotFound(无法为ActivitiesController找到action' create')

所以我需要在我的ActivitiesController中创建一个create动作,

def create
end

我需要在此处将值viewed插入viewed列?

*已更新*

resources :activities, only:    [:create, :destroy, :index, :show]

目前,我已将此设置为

def create
   @activity = PublicActivity::Activity.find_or_create_by activity_params
   redirect_to :root
end

private
def activity_params
  params.require(:activity).permit(
    :viewed
  )
end

当我运行viewActitivies函数时,我会在rails控制台中找到它,

Started POST "/activities.json" for 127.0.0.1 at 2016-01-05 12:31:17 +0100
Processing by ActivitiesController#create as JSON
  Parameters: {"viewed"=>"viewed", "activity"=>{"viewed"=>"viewed"}}
  User Load (0.1ms)  SELECT  "users".* FROM "users" WHERE "users"."id" = ?  ORDER BY "users"."id" ASC LIMIT 1  [["id", 4]]
  PublicActivity::Activity Load (2.6ms)  SELECT  "activities".* FROM "activities" WHERE "activities"."viewed" = ? LIMIT 1  [["viewed", "viewed"]]
Redirected to http://localhost:3000/
Completed 302 Found in 28ms (ActiveRecord: 2.7ms)

viewed值保持null

1 个答案:

答案 0 :(得分:0)

我不清楚您的代码是做什么的,但请注意下面的代码对activity activities对象没有做任何事情。阵列。

angular.forEach(activities, function (activitie) {
  // Nothing is done with the activitie argument
  viewActivities.create({
    viewed: `viewed`
  })
});

上面的内容会循环遍历activities,但每次都会向create函数传递一个新对象(具有相同的属性值)。我猜你想做这样的事情:

angular.forEach(activities, function (activitie) {
  activitie.viewed = 'viewed';
  viewActivities.create(activitie)
});