コメントで sub_stantial が言及されているように、WHERE 句で SELECT からエイリアスを参照することはできません。ドワーフが提案するように派生テーブルを使用できますが、Rails の派生テーブルは少し面倒です。代わりに、WHERE 内で連結を展開できます。
Song.where(:working => true)
.where("artist_name || ' ' || name ILIKE ?", '%Jack Beats%')
.where("artist_name || ' ' || name ILIKE ?", '%Epidemic%')
.where("artist_name || ' ' || name ILIKE ?", '%Dillon Francis%')
.order('songs.published_at asc')
.limit(1)
この種のことを頻繁に行っている場合は、名前付きスコープが役立つ場合があります。
class Song < ActiveRecord::Base
#...
def self.full_name_like(name)
where("artist_name || ' ' || name ILIKE ?", "%#{name}%")
end
end
その後:
Song.where(:working => true)
.full_name_like('Jack Beats')
.full_name_like('Epidemic')
.full_name_like('Dillon Francis')
.order('songs.published_at asc')
.limit(1)
アプリケーションがこのような ILIKE 検索を多数実行する場合は、全文検索システムを検討することをお勧めします。LIKE クエリはテーブル スキャンにつながり、テーブル スキャンは悲しみにつながります。