Ruby案例比较

时间:2018-03-10 16:49:13

标签: ruby sqlite case-insensitive

新秀

我在比较两个推特句柄时试图忽略这些情况。一个是在用户数据库中,它被检索到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

1 个答案:

答案 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