所以我在我的主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]}替换字符串也可以获得时髦的结果。
答案 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]