20

我还不清楚使用 Sequel 运行原始 SQL 查询的正确方法。

目前我正在尝试这个:

DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1") do |row|
 @zonename = row
end

我怎样才能将查询作为原始 SQL 运行,然后像平常一样访问结果?

if @zonename.name = "UK"
4

2 回答 2

19

请注意,而不是:

DB.fetch("SELECT * FROM zone WHERE dialcode = '#{@dialcode}' LIMIT 1")

你应该做:

DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode)

否则,如果您不控制@dialcode.

于 2012-08-17T14:53:43.067 回答
15

我有一些可能有用的指针:

  1. 你可以简单地做:

     @zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).first
    

注意:您忽略了可能有更多符合条件的结果这一事实。如果您希望返回多个可能的行,那么您可能希望通过执行...来构建一个结果数组。

    @zonename = DB.fetch("SELECT * FROM zone WHERE dialcode = ? LIMIT 1", @dialcode).all

并处理所有这些。

  1. 返回集是一个哈希。如果@zonename指向其中一条记录,那么您可以执行

     @zonename[:column_name] 
    

引用一个名为“column_name”的字段。你不能这样做@zonename.column_name(你实际上可以使用一些元编程来装饰@zonename辅助方法,但我们暂时忽略它)。

Sequel 是一个出色的界面,您对它了解得越多,您就会越喜欢它。

于 2010-06-29T21:35:35.460 回答