2011-12-08 3 views
1

hidden_​​episodes_idsが空の場合、このクエリはレコードを返しません。参加するとして、私の本当のクエリは、実際に5行です(Rails 3 Query - IN(?)は空白にすることができます

if hidden_episodes_ids.any? 
    *mode code*:conditions => ["episodes.show_id in (?) AND air_date >= ? AND air_date <= ? AND episodes.id NOT IN (?)", @show_ids, @start_day, @end_day, hidden_episodes_ids] 
else 
    *mode code*:conditions => ["episodes.show_id in (?) AND air_date >= ? AND air_date <= ?", @show_ids, @start_day, @end_day] 
end 

しかし、それはかなり醜いです:それは空の場合は

:conditions => ["episodes.show_id in (?) AND air_date >= ? AND air_date <= ? AND episodes.id NOT IN (?)", @show_ids, @start_day, @end_day, hidden_episodes_ids] 

、SQLはNOT IN (null)

のようになります。だから私のソリューションです)

単一のクエリを使用してNOT IN (null)を回避する方法はありますか?

PS:これらは、それがこのすべてクリーンアップをお手伝いしますとあなただけの代わりにwhereメソッドを使用する必要がありますので、:conditions

答えて

4

、Railsの3に移行し、古いクエリです。

scope = Thing.where(:episodes => { :show_id => @show_ids }) 
scope = scope.where('air_date BETWEEN ? AND ?', @start_day, @end_day) 

if (hidden_episode_ids.any?) 
    scope = scope.where('episodes.id NOT IN (?)', hidden_episode_ids) 
end 

範囲を条件付きで変更できることは、重複を避けることができます。

+0

偉大な:私はすべての私のコントローラとモデルを通過してすべてのクエリを書き直す必要があります:) – Frexuz

関連する問題