新秀
我在比较两个推特句柄时试图忽略这些情况。一个是在用户数据库中,它被检索到valid_handles_results数组中。我想比较一个单独的数据库中的Twitter句柄,其中twitter句柄存储在记录[1]列。
我收到以下错误:
未定义的方法`casecmp' for [" theFancyPies"]:Array
有什么建议吗?
all_orders_in_a_order_results.each do |record|
# check whether the tweet is unique or not, if yes then check whether the user has an account or not
# # the following query checks that the new entry being put in the all_orders_ordered database is unique or not
count_orders = @all_ordersDB.get_first_value('SELECT COUNT(*) FROM all_orders_ordered WHERE tweet_id = ? AND time_of_tweet = ? ' ,[record[5], record[4]])
unique_ordered = (count_orders ==0 )
# Query for selecting twitter_handles for all the users that are registered
valid_handles = %{SELECT twitter_handle FROM users}
valid_handles_results = @userDb.execute valid_handles
user_status = 0
valid_handles_results.each do |valid_handle|
if valid_handle.casecmp(record[1]) ==0
user_status = 1
else
user_status = 0
end
end
答案 0 :(得分:1)
执行valid_handles
查询时,结果是一个数组数组。即使您只选择单个列(SELECT twitter_handle FROM...
),valid_handles_results
数组中的条目也是包含单个元素的数组。
所以要修复错误,将valid_handle.casecmp(record[1])
替换为valid_handle[0].casecmp(record[1])
虽然起初看起来有点令人困惑,但其背后的原因是它意味着@userDb.execute
可以返回一致的结构,而不管查询中选择的列数是多少。
为了帮助调试将来的类似错误,了解“未定义的方法”错误真的很有帮助。 undefined method `casecmp' for ["theFancyPies"]:Array
告诉您,您尝试调用casecmp
,但您尝试调用它的对象没有具有该名称的方法。 :Array
告诉您调用方法的对象的类。因此,在这种情况下,当您期待Array
时,您有一个String
。