2

URLパスを含む配列があり、配列で指定されたURLのフィールドの1つ(「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」を呼び出すことはできないことを私は知っています。これをこのように実行して、URLのURLごとにデータベースが一度だけクエリされるようにしますこれは長さがnになる可能性があり、 n個のクエリが必要になるためです。

何か案は?

4

2 に答える 2

2

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']
于 2012-10-11T17:26:10.287 に答える
2

これは、activerecordを使用していて、最新のRailsバージョンを使用していることを前提とした簡略化されたバージョンです。pluckを使用して2回繰り返すよりも優れているため、必ず使用してくださいmap

urls = ["url1", "url2", "url3", "url4", ... ]
urlsInDB = Link.where(:url => urls).pluck(:url)
于 2012-10-11T17:26:54.403 に答える