我不断收到以下错误消息:
.rb:215:in
block in collectData': undefined method
query' for nil:NilClass (NoMethodError)
这是我的代码:
databases = {
'aaa': Mysql2::Client.new(
host: '',
username: '',
password: '',
database: ''
),
'bbb': Mysql2::Client.new(
host: '',
username: '',
password: '',
database: ''
)
}
client1.query(" bla bla bla").each do |row|
if row['mmm'] == 99
# Look in next db
next_db = databases[row['db']]
row2 = next_db.query("SELECT...")
我从第一个 sql 查询 client1.query
中获取数据库的名称,例如 row['db']
= "aaa"
或 “bbb”
。
对于测试,这样的东西也不起作用:
client1.query(" bla bla bla").each do |row|
if row['mmm'] == 99
# Look in next db
next_db = databases['aaa']
row2 = next_db.query("SELECT...")
像这样的东西是有效的:
client1 = Mysql2::Client.new(
host: '',
username: '',
password: '',
database: ''
)
client2 = Mysql2::Client.new(
host: '',
username: '',
password: '',
database: ''
)
client1.query(" bla bla bla").each do |row|
if row['mmm'] == 99
# Look in next db
next_db = client2
row2 = next_db.query("SELECT ")
我似乎无法理解为什么我的方法是“未定义”。
请帮忙,
谢谢!
最佳答案
因此,您拥有数据库的哈希值,并且您希望根据第一个数据库查询的结果查询下一个数据库...
基本上,您拥有的代码是正确的,只是您从不检查nil
。在这种情况下,无论 row['db']
返回什么,在 databases
哈希中都找不到匹配的数据库。我假设这是一个需要修复的异常。
所以...
# hash of databases
databases = {
'aaa' => Mysql2::Client.new(host: '', username: '', password: '', database: ''),
'bbb' => Mysql2::Client.new(host: '',username: '', password: '', database: '')
}
# get the first database
client1 = databases['aaa']
# perform the query
client1.query("bla bla bla").each do |row|
if row['mmm'] == 99
# look in next db
client2 = databases[row['db']]
if (client2)
row2 = client2.query("SELECT...")
else
raise "Database `#{row['db']}` is not defined."
end
end
end
关于mysql - ruby/sql 语法未定义方法 `query' for nil :NilClass (NoMethodError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38275867/