-1

存在しません。これは、レールのサーバー上の細かい動作しますが、Herokuの上では動作しません。また、など、何かが間違っていたと言い、私はBPage_name経由b_pagesを検索するときにこれは基本的に起こる:HerokuのPG :: UndefinedColumn:ERRORは

スキーマ:

create_table "b_pages", force: :cascade do |t| 
    t.string "Bpage_name" 
    t.string "first_post" 
    t.datetime "created_at",    null: false 
    t.datetime "updated_at",    null: false 
    t.string "profile_img_file_name" 
    t.string "profile_img_content_type" 
    t.integer "profile_img_file_size" 
    t.datetime "profile_img_updated_at" 
    t.string "banner_img_file_name" 
    t.string "banner_img_content_type" 
    t.integer "banner_img_file_size" 
    t.datetime "banner_img_updated_at" 
    t.integer "user_id" 
    t.string "status" 
    t.text  "bio" 
    t.string "relationship" 
    t.text  "whitelist" 
    t.text  "blacklist" 
end 

b_page.rb(例えばテーブルやカラム名など)

+0

クエリ文字列の表示方法を教えてください。 –

+0

移行を実行しましたか? –

答えて

0

識別子は場合SQLに鈍感です。ただし、テーブルを作成するときに二重引用符を使用すると、大文字と小文字が区別されます。標準的なSQLは大文字に引用符で囲まれていない識別子を折るが、PostgreSQLはインクルードはあなたが言うときについてbpage_name未知の列であることを訴えるため、小文字にそれらを折る:

where("Bpage_name like ?", "%#{query.downcase}%") 

ActiveRecordの二重引用符すべての識別子は、あなたが持っているので、もしそれがテーブルを作成するときその後、あなたはどこでもあなたがSQLスニペットでそれらを使用し、それらを引用倍増しなければならない場合(例えばBpage_nameなど)に敏感である任意の列名:

where('"Bpage_name" like ?', "%#{query.downcase}%") 
# -----^----------^ 

(そのことについてとRails/ActiveRecordの)PostgreSQLのでお勧めしています小文字の列名を下線で区切って使用するarate word。これを言って:

t.string "bpage_name" 

あなたの移行では、両方の規則に一貫していて、引用の問題を完全に避けることができます。あなたが何か言うとき

where(:Bpage_name => 'pancakes') 

をActiveRecordのは、引用符自体を追加して送信します:

where "Bpage_name" = 'pancakes' 

をデータベースに。引用符と大/小文字の区別の問題は、SQLのビットを使用する場合にのみ発生します。もちろん、ほとんどの場合、ActiveRecordでSQLスニペットを使用することになります。そのため、ノイズの多い二重引用符でコードを捨てたくない場合は、命名規則が重要です。

関連する問題