[英]Ruby w/ Postgres & Sinatra - Query won't order right with parameter?
因此,我在主紅寶石文件中設置了一個變量來處理所有帖子並獲取請求,然后使用ERB模板實際顯示頁面。 我將數據庫處理程序本身傳遞到erb模板中,然后在模板中運行查詢以獲取所有(對於本示例而言)授予。
在我的主要紅寶石文件中:
grants_main_order = "id_num"
get '/grants' do
erb :grants, :locals => {:db=>db, :order=>grants_main_order, :message=>params[:message]}
end
在erb模板中:
db = locals[:db]
getGrants = db.exec("SELECT * FROM grants ORDER BY $1", [locals[:order]])
這會產生一些非常隨機的排序,但是,如果我將$ 1替換為id_num,它會正常工作。
這是打字問題嗎? 我怎樣才能解決這個問題? 使用#{locals [:order]}替換字符串也可以得到時髦的結果。
可以使用參數將常量值放入查詢中。 在ORDER BY
使用它們可能是合法的,但沒有意義。
假設您要發出以下查詢:
SELECT first_name, last_name
FROM people
ORDER BY first_name
如果將“ first_name”放在字符串中並作為參數傳遞,則可以得到:
SELECT first_name, last_name
FROM people
ORDER BY "first_name"
差別很大。 最后一個ORDER BY
確實告訴te數據庫不要在乎每行的列值,而只是在排序時就好像所有行都是相同的。 排序順序將是隨機的。
我建議對sinatra使用datamapper( http://datamapper.org/ )。 這是一個非常巧妙的ORM,可以很好地處理您要構建的參數化查詢。
您檢查過什么是locals[:order]
嗎? 也許有些時髦。
p locals[:order]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.