Rails 3.0.1 にアプリがあります。多くのリストを持つ Books というテーブルがあります。リストが良いリストであるか悪いリストであるかに応じて、リストとの条件付きの関連付けがあります。
#Book.rb
has_many :lists
has_many :good_lists, :foreign_key => 'book_id', :class_name => "List", :conditions => {:id => List.good_list_ids}
has_many :bad_lists, :foreign_key => 'book_id', :class_name => "List", :conditions => {:id => List.bad_list_ids}
現在、アプリの起動時に条件がキャッシュされますが、ランタイムを変更できるためgood_list_ids
、動的にしたいと考えています。bad_list_ids
結合を連鎖させることで、両方のリストに関連付けられている本を見つけられるようにしたいと考えています。たとえば、 ifgood_lists_ids = [1,2,3]
とbad_lists_ids = [4,5,6]
. good_list_ids
少なくとも 1 つと少なくとも 1 つの に関連付けられている本を取得したいと考えていますbad_list_ids
。
Book.joins(:good_lists).joins(:bad_lists)
データベースからレコードをフェッチした後にフィルターを適用することで実行できることを知っています。しかし、AREL を使用して SQL でのみこれを行う方法はありますか?