0

我是红宝石的新手,所以如果这是一个愚蠢的问题,请提前原谅我。我已经用谷歌搜索了答案,但没有任何相关信息出现,似乎答案应该是显而易见的。

我试图将 DBI::DatabaseHandle 作为函数参数传递,并且在运行函数时出现错误的“参数数量”错误。这是我的代码...

require 'rubygems'
require 'dbi'

class CmsTest

    def self.get_dbi_connection(hostname, user, password)
        connection = DBI.connect("DBI:OCI8:" + hostname, user, password)
        return connection
    end

    def self.query(connection, sql)
        puts connection
        puts sql
        begin
            request = connection.prepare("#{query}")
            request.execute
            fetched = []
            request.fetch do |row|
                fetched << row.to_h 
            end 
            request.finish
            return fetched
        rescue DBI::DatabaseError => e
            log "An error occurred"
            log "Error code:    #{e.err}"
            log "Error message: #{e.errstr}"
        ensure
        end
    end
end

所以我调用这个的代码看起来像这样......

require 'rubygems'
require 'cms_test'

connection = CmsTest.get_dbi_connection('foo', 'bar', 'fubar')
CmsTest.query(connection, "<some sql query>")

所以第一个参数是一个 DBI::DatabaseHandle 对象,第二个是一些 sql 查询字符串。当我运行时,我得到了这个......

`query': wrong number of arguments (0 for 2) (ArgumentError)

即使查询签名包含两个参数,并且我正在向方法传递两个参数,这也是如此。对我来说真正奇怪的是,如果我在方法主体中的任何地方放置和退出语句,在放置之后它将表明该方法确实收到了 2 个参数......

#<DBI::DatabaseHandle:0x007fa2a316c9f0>
select licensor_id, licensor_name from cf_licensor

我无法理解这一点。请帮忙。

4

1 回答 1

0

你有一个名为的方法query

def self.query(connection, sql)

然后在里面query你尝试调用query

request = connection.prepare("#{query}")
# -- method call ---------------^^^^^

您可能想在sql那里使用并且不需要字符串插值:

request = connection.prepare(sql)
于 2013-05-21T00:29:26.467 回答