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)")
這裏已經回答 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
哇,@manoj,這些都是一些相互矛盾的答案(接受的答案你指針中的一個說arel不支持OR,而另一個指針最受歡迎的答案則表示它是)。對這兩種答案的評論似乎都沒有就最佳方式達成一致。順便說一句,我發現arel支持或。但是,我仍然不確定如何在連接表中使用arel。我正在更新我的問題以提供更多信息。 – 2013-04-05 18:39:53
正如鏈接中的評論所說,'或'是ARel的新增內容,因此接受的答案可能在實施之前編寫,並且是最受歡迎的答案。 – MrTheWalrus 2013-04-05 19:00:30