PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

ProtocolViolation:ERROR:il messaggio bind fornisce 0 parametri, ma l'istruzione preparata richiede 1

Nel tuo caso sembra che tu stia usando @comments.to_sql stai inserendo quella dichiarazione preparata nella tua sottoselezione senza inserire il parametro per essa. Puoi provare semplicemente a includere i dati dei commenti in questo modo:

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

Questo problema sembra derivare anche dal modo in cui le istruzioni preparate sono costruite in Rails e potrebbe essere causato da entrambi i problemi all'interno di Rails stesso (problema di Rails #15920 , che è stato risolto in Rails 4.2) o da problemi con varie gemme che aiutano a generare query (esempio:problema Rails #20236 ) o anche dal modo in cui definisci le tue associazioni di modelli (Rails issues #12852 ).

È possibile semplicemente disabilitare completamente le istruzioni preparate aggiungendo una direttiva al tuo database.yml file:

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

Ma prima, potresti voler controllare e assicurarti di non utilizzare parametri non necessari nelle associazioni di modelli come questa:

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

...che dovrebbe semplicemente omettere foreign_key , in questo modo:

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