簡體   English   中英

帶有Postgres和Sinatra的Ruby-查詢是否不帶參數正確排序?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM