在升级到Ruby 2和Rails 4之前,我的Rspec测试套件完全通过了。
从那以后,我有:
现在,我收到此错误消息:
PG::ProtocolViolation: ERROR: bind message supplies 2 parameters, but prepared statement "a24" requires 1
(在此问题末尾粘贴完整堆栈跟踪。)
违规测试是:
it "should update a survey" do
@product = create(:product)
@question = create(:question, :product => @product)
@f1 = create(:field, :question => @question)
@f2 = create(:field, :question => @question)
@f3 = create(:field, :question => @question)
@f4 = create(:field, :question => @question)
@review = create(:review, :product => @product)
@competitor = @review.competitors.first
@survey = @competitor.surveys.find_by_question_id(@question.id)
@parameters = {"api_key"=>"redacted", "id"=>"#{@survey.id}", "environment"=>"production", "postback_url"=>"redacted", "blueprint"=>"three_radio_buttons_simple", "input"=>{redacted}, "status"=>"complete", "output"=>{"Pick_one"=>"option_1", "Sensible"=>"", "Bugs"=>""}, "verbose_output"=>{"Pick_one"=>"option_1", "Sensible"=>"", "Bugs"=>""}}
post :receive, {:id => @survey.id, :params => @parameters}
@postback = @survey.postbacks.last
@postback.content["params"].should == @parameters
end
违规行调用以下工厂:
factory :review do
sequence(:client_name) {|n| "client-#{n}"}
url {"http://#{client_name.downcase}.com"}
test_client true
product
end
模型与此相关:
class Product < ActiveRecord::Base
has_many :reviews
end
class Review < ActiveRecord::Base
belongs_to :product
end
当我在开发中运行应用程序并手动为产品创建新评论时,我不会收到此错误。
我该怎么办?
感谢。
完整堆栈跟踪:
Failures:
1) PostbacksController POST receive should update a survey
Failure/Error: @review = create(:review, :product => @product)
ActiveRecord::StatementInvalid:
PG::ProtocolViolation: ERROR: bind message supplies 2 parameters, but prepared statement "a24" requires 1
: SELECT "surveys".* FROM "surveys" WHERE "surveys"."competitor_id" = $1 AND "surveys"."id" = $1 ORDER BY "surveys"."id" ASC LIMIT 1
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:786:in `get_last_result'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:786:in `exec_cache'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:139:in `block in exec_query'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:435:in `block in log'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/notifications/instrumenter.rb:20:in `instrument'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract_adapter.rb:430:in `log'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql/database_statements.rb:137:in `exec_query'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/postgresql_adapter.rb:891:in `select'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:24:in `select_all'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/query_cache.rb:63:in `select_all'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/querying.rb:36:in `find_by_sql'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:585:in `exec_queries'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/association_relation.rb:15:in `exec_queries'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:471:in `load'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:220:in `to_a'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation/finder_methods.rb:325:in `find_first'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation/finder_methods.rb:90:in `first'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/relation.rb:129:in `first'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/singular_association.rb:42:in `find_target'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/association.rb:147:in `load_target'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/association.rb:54:in `reload'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/singular_association.rb:9:in `reader'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/builder/association.rb:70:in `survey'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/builder/belongs_to.rb:84:in `belongs_to_touch_after_save_or_destroy_for_survey'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:419:in `_run__1453433934553446459__save__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:106:in `save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/validations.rb:51:in `save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/attribute_methods/dirty.rb:32:in `save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:270:in `block (2 levels) in save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:200:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:270:in `block in save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:281:in `rollback_active_record_state!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:269:in `save'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/persistence.rb:46:in `create'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:121:in `block in create'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:270:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:121:in `create'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/dynamic_matchers.rb:141:in `dispatch'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:67:in `find_or_create_by_field_id'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:20:in `method_missing'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/collection_proxy.rb:10:in `block in method_missing'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_proxy.rb:845:in `block in scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:270:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_proxy.rb:845:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/collection_proxy.rb:9:in `method_missing'
# ./app/models/survey.rb:78:in `block in create_matching_results'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation/delegation.rb:13:in `map'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation/delegation.rb:13:in `map'
# ./app/models/survey.rb:78:in `create_matching_results'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:395:in `_run__1602446046358961134__create__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:306:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/timestamp.rb:57:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:477:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `block in create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:423:in `_run__1602446046358961134__save__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:128:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/validations.rb:57:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/attribute_methods/dirty.rb:41:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `block in save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:200:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/validations.rb:17:in `create!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:129:in `block in create!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:270:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:129:in `create!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/dynamic_matchers.rb:141:in `dispatch'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:67:in `find_or_create_by_question_id_and_iteration_and_review_id!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/dynamic_matchers.rb:20:in `method_missing'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/collection_proxy.rb:10:in `block in method_missing'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_proxy.rb:845:in `block in scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/relation.rb:270:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_proxy.rb:845:in `scoping'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-deprecated_finders-1.0.3/lib/active_record/deprecated_finders/collection_proxy.rb:9:in `method_missing'
# ./app/models/competitor.rb:125:in `block (2 levels) in create_matching_surveys'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/core_ext/range/each.rb:8:in `each'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/core_ext/range/each.rb:8:in `each_with_time_with_zone'
# ./app/models/competitor.rb:124:in `block in create_matching_surveys'
# ./app/models/competitor.rb:123:in `each'
# ./app/models/competitor.rb:123:in `create_matching_surveys'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/performable_method.rb:26:in `perform'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:105:in `block in invoke_job'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/lifecycle.rb:60:in `call'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/lifecycle.rb:60:in `block in initialize'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/lifecycle.rb:65:in `call'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/lifecycle.rb:65:in `execute'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/lifecycle.rb:38:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:102:in `invoke_job'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:37:in `block in enqueue'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:36:in `tap'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/backend/base.rb:36:in `enqueue'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/delayed_job-4.0.0/lib/delayed/message_sending.rb:12:in `method_missing'
# ./app/models/competitor.rb:119:in `delayed_create_matching_surveys'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:395:in `_run__2822788912217913460__create__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:306:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/timestamp.rb:57:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:477:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `block in create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:393:in `_run__2822788912217913460__save__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:128:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/validations.rb:57:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/attribute_methods/dirty.rb:41:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `block in save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:200:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/has_many_association.rb:38:in `insert_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/associations.rb:44:in `block (2 levels) in create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_association.rb:367:in `add_to_target'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/associations.rb:42:in `block in create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_association.rb:152:in `block in transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:200:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/associations/collection_association.rb:151:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/associations.rb:41:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/associations.rb:30:in `create!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/protected_attributes-1.0.5/lib/active_record/mass_assignment_security/associations.rb:63:in `create!'
# ./app/models/review.rb:261:in `create_self_as_competitor'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:395:in `_run__367966210942393270__create__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:306:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/timestamp.rb:57:in `create_record'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:477:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `block in create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:403:in `_run__367966210942393270__save__callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/callbacks.rb:80:in `run_callbacks'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/callbacks.rb:302:in `create_or_update'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/persistence.rb:128:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/validations.rb:57:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/attribute_methods/dirty.rb:41:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `block in save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:326:in `block in with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `block in transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:210:in `within_new_transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/connection_adapters/abstract/database_statements.rb:202:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:209:in `transaction'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:323:in `with_transaction_returning_status'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activerecord-4.0.2/lib/active_record/transactions.rb:275:in `save!'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/configuration.rb:14:in `block in initialize'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/evaluation.rb:15:in `[]'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/evaluation.rb:15:in `create'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/strategy/create.rb:12:in `block in result'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/strategy/create.rb:9:in `tap'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/strategy/create.rb:9:in `result'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/factory.rb:42:in `run'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/factory_runner.rb:23:in `block in run'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/activesupport-4.0.2/lib/active_support/notifications.rb:161:in `instrument'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/factory_runner.rb:22:in `run'
# /Users/steven/.rvm/gems/ruby-2.0.0-p353/gems/factory_girl-4.3.0/lib/factory_girl/strategy_syntax_method_registrar.rb:20:in `block in define_singular_strategy_method'
# ./spec/controllers/postbacks_controller_spec.rb:17:in `block (3 levels) in <top (required)>'
更新
缩写版survey.rb
:
class Survey < ActiveRecord::Base
belongs_to :competitor, :touch => true
belongs_to :question
belongs_to :battery, :touch => true
belongs_to :review
has_many :screenshots
has_many :results, :dependent => :delete_all
has_many :postbacks, :dependent => :delete_all
attr_accessible :selection, :input_id, :condition_id, :precondition_id, :override_points, :override_explanation, :bugs, :oddities
delegate :potential_inputs, :product, :categories, :inputs, :to => :competitor, :allow_nil => true
delegate :name, :standard, :element, :meta, :fields, :additive, :pictures, :to => :question, :allow_nil => true
delegate :about, :pic_links, :manual, :level, :requires_data_from_other_question, :input_id, :to => :question, :allow_nil => true
delegate :url_helpers, to: 'Rails.application.routes'
after_create :create_matching_results, :delay_create_matching_batteries, :touch_review
after_touch :delayed_reset_cache, :touch_dependencies
after_destroy :destroy_battery_if_empty
def create_matching_results
fields.map{|f| results.find_or_create_by_field_id(f.id)} unless destroyed? # line 78
end
end
答案 0 :(得分:0)
解决方案在database.yml
:
test:
prepared_statements: false
答案 1 :(得分:0)
这已在Rails 4.0.4中修复,升级使痛苦消失