0

所以我在我的主 ruby​​ 文件中设置了一个变量,它处理我所有的帖子和获取请求,然后使用 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]])

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

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

4

3 回答 3

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- 子句确实告诉数据库不要关心每一行的列值,并且就像所有行都相同一样进行排序。排序顺序将是随机的。

于 2013-03-23T16:36:22.513 回答
0

我建议对 sinatra 使用 datamapper ( http://datamapper.org/ )。这是一个非常漂亮的 ORM,可以很好地处理您尝试构建的参数化查询。

于 2010-04-30T15:58:56.643 回答
0

你检查过什么locals[:order]吗?也许那里有一些时髦的东西。

p locals[:order]

于 2010-04-30T18:41:09.487 回答