Ruby / Postgres& Sinatra - 查询不会与参数一起订购吗?

时间:2010-04-30 15:52:45

标签: ruby postgresql sinatra erb

所以我在我的主ruby文件中设置了一个变量,它处理我的所有帖子和获取请求,然后使用ERB模板来实际显示页面。我将数据库处理程序本身传递给erb模板,然后在模板中运行查询以获取所有(对于此示例)授予。

在我的主要ruby文件中:

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]])

这产生了一些非常随机的排序,但是如果我用id_num替换$ 1,它就可以正常工作。

这是打字问题吗?我怎样才能解决这个问题?使用#{locals [:order]}替换字符串也可以获得时髦的结果。

3 个答案:

答案 0 :(得分:1)

参数用于将常量值放入查询中。在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数据库不关心每一行的列值,只是排序好像所有行都相同。排序顺序是随机的。

答案 1 :(得分:0)

我建议对sinatra使用datamapper(http://datamapper.org/)。它是一个非常光滑的ORM,可以处理你试图构建的参数化的查询。

答案 2 :(得分:0)

您是否检查了locals[:order]是什么?也许在那里有点时髦。

p locals[:order]