【问题标题】:AngularJS to Rails MassAssignmentSecurity::ErrorAngularJS 到 Rails MassAssignmentSecurity::Error
【发布时间】:2013-12-17 04:01:29
【问题描述】:

在使用带有 Rails 的 AngularJS 时,我在更新时不断收到 MassAssignmentSecurity 错误。我知道这是由于将“created_at”和“updated_at”等属性与数据一起传递。

为了解决这个问题,我一直在构建一些 json,它只是传递表单中的属性。这确实会在整个程序中产生更多的维护。

有没有更好的方法来做到这一点?

这是一个例子:

AngularJS

  $scope.contruct_json = ->
    {
      name: $scope.client.name
      surname: $scope.client.surname
    }


  # --------------------------------------------------------------------------------
  # Update
  # --------------------------------------------------------------------------------
  $scope.update = ->
    Client.update
      id: $stateParams['id']
    ,
      client: $scope.contruct_json()
    , (response) ->
      $location.path "/clients/#{$stateParams['id']}"

更新

将我的 AngularJS 代码更改为此

  # Remove keys from hash to make it acceptable for Rails to update
  $scope.remove_keys = (hash) ->
    new_hash = {}
    angular.forEach(hash, (value,key) ->
      if(key!='id' && key!='created_at' && key!='updated_at')
        new_hash[key]=value
    ,  new_hash)
    return new_hash
  # --------------------------------------------------------------------------------
  # Update
  # --------------------------------------------------------------------------------
  $scope.update = ->
    Client.update
      id: $stateParams['id']
    ,
      client: $scope.remove_keys($scope.client)
    , (response) ->
      $location.path "/clients/#{$stateParams['id']}"

【问题讨论】:

    标签: javascript ruby-on-rails angularjs


    【解决方案1】:

    也许您应该考虑允许使用attr_accessibleClient 模型上的属性进行批量分配?

    【讨论】:

    • 所有属性都可以访问吗?
    • 一般来说,不 :) 我对这些事情持悲观态度,只启用您直接需要的事情。另一种选择是在你的控制器中去掉这些属性,比如before_filter 或类似的东西
    【解决方案2】:

    无论您如何分配属性,您都需要在模型中将它们声明为可批量分配的。请尝试以下操作:

    class Client < ActiveRecord
        attr_accessible :created_at, :updated_at # Any attributes you need to make mass-assignable
    end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-16
      • 2013-11-27
      • 1970-01-01
      • 2013-02-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多