发布空数组的AngularJS变为零

时间:2016-07-27 06:36:09

标签: ruby-on-rails arrays angularjs ruby coffeescript

我在后端使用带有Rails 3.2的AngularJS 1.5,当我发布一个空数组时,它到达我的Rails创建方法时,有些东西将它从空数组转换为nil值。

  $scope.create = ->
    Invoice.save(
      {}
    ,
      invoice: InvoiceService.construct_json($scope)
    , (response) ->
      $location.path "/invoices"
    , (response) ->
      $scope.errors = response.data
      flash('alert', "Invoice has errors and cannot be saved", 2000)
    )

在Invoice.save之前,我可以看到timesheets_attributes设置为[]。

construct_json: (scope) ->
  {
    # <snip irrelevant info>
    # Timesheets
    timesheets_attributes: _.map(scope.invoice.timesheets_attributes, (ts) ->
      _.omit(ts, 'job')
    )
  }

如果我将byebug放在我的发票控制器创建方法中,我发现params [:invoice] [:timesheets_attributes]设置为nil。

如果我添加时间表,则Angular会正确发布数组。有没有办法可以阻止数组转换为nil?

我目前的工作是应用before_filter,但由于引入了cancancan,此 hack 现在已停止工作。 cancancan的load_and_authorize_resource发生在任何过滤器之前。我从来没有真正喜欢这个黑客,并想知道为什么它将一个完美的好空阵列转换为零。

  def json_fix
    params[:invoice][:timesheets_attributes] ||= []
  end

1 个答案:

答案 0 :(得分:0)

我发现如果你将带有我的json_fix的before_filter置于cancancan load_and_authorize_resource之上,那么就可以了。

typeof freq[character] !=== undefined]