sql >> データベース >  >> RDS >> PostgreSQL

ProtocolViolation:エラー:バインドメッセージは0個のパラメーターを提供しますが、プリペアドステートメントには1個のパラメーターが必要です

    あなたの場合、@comments.to_sqlを使用しているためと思われます その準備されたステートメントを、そのパラメーターを持ち込まずに副選択にプルしています。次のようにコメントデータを含めるだけで試すことができます:

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

    この問題は、プリペアドステートメントがRailsに組み込まれている方法にも起因しているようであり、Rails自体のいずれかの問題が原因である可能性があります(Railsの問題#15920 、これはRails 4.2で修正されています)、またはクエリの生成に役立つさまざまなgemの問題(例:Railsの問題#20236 )またはモデルの関連付けを定義する方法によっても(Railsの問題#12852

    database.ymlにディレクティブを追加することで、プリペアドステートメントを完全に無効にすることができます。 ファイル:

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

    ただし、最初に、次のようにモデルの関連付けで不要なパラメータを使用していないことを確認することをお勧めします。

    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
    

    ...これはforeign_keyを除外する必要があります 、このように:

    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
    



    1. MySQL 5では、SELECT COUNT(1)FROMtable_nameは非常に遅いです

    2. リバースエンジニアリング(オラクル)スキーマからERDへ

    3. Oracleでパラメータとしてテーブル名を渡すことは可能ですか?

    4. 各クエリの更新にかかるExcelODBCデータ接続クエリの時間