2013-04-05 39 views
0

我有一個有一個故事模式:類別屬性。故事也在與Tag的HABTM關係中。試圖建立一個複雜的AR查詢包含關聯

class Tag < ActiveRecord::Base 

    has_and_belongs_to_many :stories, :uniq => true 

    validates :name, :presence => true 
    validates :creator_id, :presence => true 

end 

class Story < ActiveRecord::Base 

    attr_accessible :title, :category 

    belongs_to :user 
    has_and_belongs_to_many :tags, :uniq => true 
end 

我想以搜索或者(i)有一個類別是在傳遞category_array故事或(ii)具有相關聯的tag.name即在傳遞tag_array。

第一部分是直接的:

Story.where(:category => category_array) 

這是伸展我的能力第二部分。任何幫助將不勝感激!

UPDATE

這解決了問題,是很容易閱讀,但它是最好的方法?順便說一句,我曾想過使用AREL的,但我還是不明白,我怎麼會穿過連接表中使用AREL:

Story.includes(:tags).where("tags.name in (tag_array) OR category in (cat_array)") 
+0

這裏已經回答 http://stackoverflow.com/questions/3291152/ruby-on-rails-3-howto-make-or-condition 這裏 的http:// stackoverflow.com/questions/3684311/rails-how-to-chain-scope-queries-with-or-instead-of-and – manoj 2013-04-05 17:51:04

+0

哇,@manoj,這些都是一些相互矛盾的答案(接受的答案你指針中的一個說arel不支持OR,而另一個指針最受歡迎的答案則表示它是)。對這兩種答案的評論似乎都沒有就最佳方式達成一致。順便說一句,我發現arel支持或。但是,我仍然不確定如何在連接表中使用arel。我正在更新我的問題以提供更多信息。 – 2013-04-05 18:39:53

+0

正如鏈接中的評論所說,'或'是ARel的新增內容,因此接受的答案可能在實施之前編寫,並且是最受歡迎的答案。 – MrTheWalrus 2013-04-05 19:00:30

回答

0

這解決了問題,是很容易閱讀,但它是最好的方法?

Story.includes(:tags).where("tags.name in (tag_array) OR category in (cat_array)")