挂钩NoMethodError发生错误:nil的未定义方法`each':NilClass(AngularJS)

时间:2013-05-03 21:53:42

标签: ruby-on-rails postgresql rspec angularjs database-cleaner

我正在使用Rails 3.2.13和postgres,rspec 2.13,capybara 2.0.3和database_cleaner 0.9.1。我也在使用AngularJS。我有一个js:true的规范,用于测试表单的提交(创建标准的rails模型实例)。唯一可能不是标准Rails的是我使用AngularJS通过Ajax提交此表单。每当规范运行时,我都会收到以下错误:

An error occurred in an after hook
  NoMethodError: undefined method `each' for nil:NilClass
  occurred at /Users/morgler/.rvm/gems/ruby-1.9.3-p194@pennyworth/gems/activerecord-    3.2.13/lib/active_record/associations/collection_association.rb:310:in `replace'

规范随后失败。对我来说,似乎,当database_cleaner运行时,在挂钩时发生此错误。我在spec_helper.rb中得到了这个:

config.before(:each) do
  if Capybara.current_driver == :rack_test
    DatabaseCleaner.strategy = :transaction
  else
    DatabaseCleaner.strategy = :truncation
  end
  DatabaseCleaner.start
end

config.after(:each) do
  DatabaseCleaner.clean
end

单击表单的提交按钮,通过AngularJS提交表单的代码是:

$scope.saveOrderProcess = (event) ->
  if $scope.orderProcess.id
    $scope.orderProcess.$update()
  else
    OrderProcess.create($scope.orderProcess)

任何想法,我在这里缺少什么?

1 个答案:

答案 0 :(得分:1)

我的问题根源似乎完全不同:

我正在使用深层嵌套对象(order_process有order_steps有option_items)。 Rails需要将这些嵌套对象称为“option_items_attributes”,依此类推。看来,在我的哈希深处,我无法将“option_items”转换为“option_items_steps”。