PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

ProtocolViolation:ERROR:Bind-Nachricht liefert 0 Parameter, aber die vorbereitete Anweisung erfordert 1

In Ihrem Fall scheint es, weil Sie @comments.to_sql verwenden Sie ziehen diese vorbereitete Anweisung in Ihre Unterauswahl, ohne den Parameter dafür einzufügen. Sie können versuchen, einfach die Kommentardaten wie folgt einzufügen:

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

Dieses Problem scheint auch auf die Art und Weise zurückzuführen zu sein, wie die vorbereiteten Anweisungen in Rails erstellt werden, und könnte durch Probleme in Rails selbst verursacht werden (Rails-Problem #15920 , das in Rails 4.2 behoben wurde) oder durch Probleme mit verschiedenen Gems, die beim Generieren von Abfragen helfen (Beispiel:Rails-Problem #20236 ) oder sogar durch die Art und Weise, wie Sie Ihre Modellzuordnungen definieren (Rails Issues #12852 ). ).

Es ist möglich, vorbereitete Anweisungen einfach vollständig zu deaktivieren, indem Sie eine Direktive zu Ihrer database.yml hinzufügen Datei:

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

Aber zuerst sollten Sie überprüfen und sicherstellen, dass Sie keine unnötigen Parameter wie diese in Ihren Modellzuordnungen verwenden:

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

...wobei foreign_key einfach weggelassen werden sollte , etwa so:

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