自从升级到Rails 4后,为什么我会遇到这些与PostgreSQL有关的错误?

3
在升级到Ruby 2和Rails 4之前,我的Rspec测试套件完全通过了。
此后,我已经:
  • 从Ruby 1.9.2升级到Ruby 2.0.0
  • 从Rails 3.2.11升级到Rails 4.0.2
  • 根据需要升级了一些gem
现在,我收到了这个错误信息:
PG::ProtocolViolation: ERROR:  bind message supplies 2 parameters, but prepared statement "a24" requires 1

在问题末尾粘贴了完整的堆栈跟踪。(Full stack trace pasted at the end of this question.)
有问题的测试如下:
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

你能发布一下你的“Survey”模型吗?堆栈跟踪指向/survey.rb:78 - Srikanth Venugopalan
似乎又出现了failing migrations : PG::ProtocolViolation Railsdevise : new user registration issues , PG::ProtocolViolation . Rails4, Postgres这样的问题。虽然没有答案,但评论中似乎有解决方案。 - mu is too short
嗨mu -- 是的,我看到了其他的问题,但是没有找到足够的信息来继续前进。 - steven_noble
嗨,Srikanth。谢谢。现在发布。请在两秒钟内查看上面。 - steven_noble
请注意,我刚刚更新了第78行以符合Rails 4的标准--fields.map{|f| results.find_or_create_by(:field_id => f.id)} unless destroyed?--但我仍然收到相同的错误。 - steven_noble
一次性进行所有更改并不明智 - 应该采用小的增量更改。 - sevenseacat
2个回答

1

解决方案在database.yml中:

test:
  prepared_statements: false

0

这个问题在Rails 4.0.4中已经修复,升级后将不再烦扰。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接