Ruby on rails 后钩子命名错误:未定义的方法'each';对于nil:NilClass(AngularJS)
我将Rails 3.2.13与postgres、rspec 2.13、capybara 2.0.3和database_cleaner 0.9.1一起使用。我也在用AngularJS。我有一个js:true规范,它测试表单的提交(创建一个标准rails模型实例)。唯一可能不是标准Rails的是,我使用AngularJS通过Ajax提交此表单。无论何时运行规范,都会出现以下错误:Ruby on rails 后钩子命名错误:未定义的方法'each';对于nil:NilClass(AngularJS),ruby-on-rails,postgresql,rspec,angularjs,database-cleaner,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: undefine
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'
该规范随后失败。在我看来,当数据库运行时,这个错误发生在after钩子中。我在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)
你知道我在这里遗漏了什么吗?我的问题根源似乎完全不同: 我使用的是深度嵌套对象(order\u进程有order\u步骤有option\u项)。Rails需要将这些嵌套对象称为“option\u items\u attributes”等等。看起来,在我的散列的某个深处,我未能将“选项项”转换为“选项项步骤”