使用。凡方法我剛剛開始使用。凡方法,我有點困惑如何充分利用它。在Rails3中
我想這樣做:
@books = Book.where(:author_id => 1 || 2)
清楚我知道這是不行的,但我想證明,我想在這裏一些額外的邏輯。一些「或」「和」「不等於」等
爲在那裏我可以研究這個任何想法?我正在尋找rails API,但我沒有看到任何有用的東西。
謝謝!
使用。凡方法我剛剛開始使用。凡方法,我有點困惑如何充分利用它。在Rails3中
我想這樣做:
@books = Book.where(:author_id => 1 || 2)
清楚我知道這是不行的,但我想證明,我想在這裏一些額外的邏輯。一些「或」「和」「不等於」等
爲在那裏我可以研究這個任何想法?我正在尋找rails API,但我沒有看到任何有用的東西。
謝謝!
1 || 2
是不行的(它的計算結果爲1,所以它應該相當於Book.where(:author_id => 1)
我會做:。
@books = Book.where(:author_id => [1, 2])
生成的SQL是WHERE author_id IN (1, 2)
查看源(!沒有什麼像樣的文檔),你可以通過SQL,可以設定參數的sql爲:條件等,所以你可以這樣做:
@books = Book.where("author_id = 1 OR author_id = 2")
不理想的下降到原始SQL,但我看不到一個更優雅的方式來使用where方法。
我會做'@books = Book.where( 「AUTHOR_ID =?OR AUTHOR_ID =?」,1,2)' – DemitryT
看MetaWhere,https://github.com/ernie/meta_where - 這使得諸如此類的事情相當整齊:)
這聽起來像你可能想看看阿雷爾更復雜的事情。它已經內置於Rails 3(AR在內部使用它)。
book = Book.arel_table
# range
Book.where(book[:author_id].gt(0).and(book[:author_id].lt(3))
#or
Book.where(b[:author_id].eq(0).or(t[:author_id].eq(3).order(:first_name))
#joins
book.join(authors).on(book[:author_id].eq(author[:id])).
where(book[:title].matches 'hokum n stuff')
還分組,聚合等等。缺點是文檔很少。 docs
嘿凸輪,這真是棒極了的感謝!關於如何使用where或者其他方法來實現「and」或「不等於」類型邏輯的任何想法? – Elliot
嘿埃利奧特,不幸的是,哈希參數'where'不支持「不等於」類型的查詢(見http://guides.rubyonrails.org/active_record_querying.html「只有平等,範圍和子集檢查是可能的散列條件「)。就「和」查詢而言,只需在你的散列中添加另一個鍵:'Book.where(:author_id => [1,2],:bestseller => true)'將編譯爲'WHERE author_id IN(1, 2)AND暢銷書是真)' – cam
它應該如何修改爲mongoid –