PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

ProtocolViolation :ERREUR :le message de liaison fournit 0 paramètres, mais l'instruction préparée en nécessite 1

Dans votre cas, il semble que parce que vous utilisez le @comments.to_sql vous tirez cette instruction préparée dans votre sous-sélection sans apporter le paramètre correspondant. Vous pouvez essayer d'inclure simplement les données de commentaire comme ceci :

  @comments = current_clinician.comments.select('ON (patient_id) *').uniq.order("patient_id, created_at DESC").include(:comment)
  @comment_list = @comments.include(:comment)

Ce problème semble également provenir de la façon dont les instructions préparées sont construites dans Rails et pourrait être causé par l'un ou l'autre des problèmes dans Rails lui-même (problème Rails #15920 , qui a été corrigé dans Rails 4.2) ou par des problèmes avec diverses gemmes qui aident à générer des requêtes (exemple :Rails issue #20236 ) ou encore par la façon dont vous définissez vos associations de modèles (Rails issues #12852 ).

Il est possible de désactiver purement et simplement les instructions préparées en ajoutant une directive à votre database.yml fichier :

production:
  adapter: postgresql
  database: prod_dbname
  username: prod_user
  password: prod_pass
  prepared_statements: false

Mais d'abord, vous voudrez peut-être vérifier et vous assurer que vous n'utilisez pas de paramètres inutiles dans vos associations de modèles comme ceci :

class DashboardTab < ActiveRecord::Base
  has_many :dashboard_tab_feeds, foreign_key: :dashboard_tab_id, dependent: :destroy
  has_many :social_feeds, through: :dashboard_tab_feeds
end

class DashboardTabFeed < ActiveRecord::Base
  belongs_to :social_feed
  belongs_to :dashboard_tab
end

class SocialFeed < ActiveRecord::Base
  has_many :dashboard_tab_feeds, foreign_key: :social_feed_id, dependent: :destroy
end

... qui devrait simplement omettre foreign_key , comme ceci :

class DashboardTab < ActiveRecord::Base
  has_many :dashboard_tab_feeds, dependent: :destroy
  has_many :social_feeds, through: :dashboard_tab_feeds
end

class DashboardTabFeed < ActiveRecord::Base
  belongs_to :social_feed
  belongs_to :dashboard_tab
end

class SocialFeed < ActiveRecord::Base
  has_many :dashboard_tab_feeds, dependent: :destroy
end