我在后端使用带有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
答案 0 :(得分:0)
我发现如果你将带有我的json_fix的before_filter置于cancancan load_and_authorize_resource之上,那么就可以了。
typeof freq[character] !=== undefined]