ruby - 使用 WHERE 筛选数据库结果

标签 ruby database search conditional-statements where

我有一个包含 URL 路径的数组,我希望能够在我的数据库中的一个表中搜索数组中指定的 URL 的哪个字段(标记为“URL”)。

所以我有一个我想要实现的简化版本。

urls = ["url1", "url2", "url3", "url4", ... ]
urlsInDB = []
results = Link.all
urls.each() do |url|
 if not results.where(:url=>url).blank?
   urlsInDB << url
 end
end

但是我知道您不能对“.all”获得的一组结果调用“.where”。我想这样做,这样数据库只查询一次,而不是针对 urls 中的每个 URL,因为它的长度可以是 n,这将需要 n 个查询。

有什么想法吗?

最佳答案

在 SQL 中,您可以这样说:

SELECT * FROM links WHERE url IN ('url1', 'url2', 'url3');

你可以用 ActiveRecord 做到这一点,方法是:

Link.where(:url => ['url1', 'url2', 'url3'])

如果您只想获取匹配的 URL 数组,请说:

Link.select(:url).where(:url => ['url1', 'url2', 'url3']).map(&:url)
# SQL: SELECT url FROM links WHERE url IN ('url1', 'url2', 'url3')
# => ['url1', 'url2']

关于ruby - 使用 WHERE 筛选数据库结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12845114/

相关文章:

ruby-on-rails - Rails 事件记录查找 ( :all, :order => ) 问题

ruby - 获取FTP服务器上文件的修改时间

php - 基于下拉选择的SQL查询

Sharepoint 2010 搜索无法抓取 mediawiki 站点

algorithm - 需要一些帮助来理解搜索算法(A*、IDA*、DFS、BFS、IDDFS 等)

ruby - 由于 GEM_HOME 的要求,启动 Ruby 应用程序非常慢

database - 使用不同 API 的数据可访问性

php - 从一个表中获取信息并将返回的信息保存在新表中 - Laravel 5.2

mysql - 搜索可见记录 = 1

ruby - "undefined method ' 变成 ' for nil:NilClass"不应该的地方