-1

這將運行軌道服務器上正常,但在Heroku不工作,說出事了等等,當我通過BPage_name搜索b_pages這基本上發生:Heroku的PG :: UndefinedColumn:不存在錯誤

模式:

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的雙引號的所有標識符時,它會創建表,如果您有這是區分大小寫(如Bpage_name)任何列名,那麼你必須仔細到處引用他們在SQL片段中使用它們:

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

PostgreSQL的建議的做法(和Rails/ActiveRecord的這個問題)是使用帶有下劃線的小寫字母名稱來分隔憤怒的話。說這個:

t.string "bpage_name" 

在你的遷移將更符合兩個約定,並會完全避免你的報價問題。

當你這樣說:

where(:Bpage_name => 'pancakes') 

的ActiveRecord將添加引號本身併發送:

where "Bpage_name" = 'pancakes' 

到數據庫。引用和區分大小寫問題僅出現在使用SQL位時;當然,你幾乎總是最終在ActiveRecord中使用SQL代碼片段,所以如果你不想用一堆嘈雜的雙引號代替代碼,命名約定仍然很重要。

相關問題