2016-11-16 30 views
0

假設我有許多不同的類,它們繼承自Tree,並且它們中的每一個都實現了一種稱爲grow!的方法,但是具有稍微不同的ActiveRecord實現。說每種方法有一個ActiveRecord查詢開始尋找合適的樹木像成長:在Rails中使用procs動態激發不同的主動記錄查詢?

trees = Tree 
      .joins(:fruits) 
      .where(land_id: land.id) 
      .where(fruits: { sweet: true }) 
      .where(fruits: { season_id: season.id }) 

說,我們希望從查詢到查詢換出部分是部分:

.where(fruits: { sweet: true })

假設我們想要建立一個WinterTree類和它自己的生長方法,但它只生長非甜的水果,所以我們想要返回只生長非甜水果的樹。反正有沒有必要重寫剩下的查詢,只換出一個查詢的一部分,也許在父類Tree類中寫下其餘的查詢?無論如何要動態地調用查詢的AR段。

+0

我發現使用where語句構建動態查詢很容易sql如:Tree.joins(:fruits).where(「land_id =?」,land.id)等 – bkunzi01

+0

心靈充實這個答案? – Jwan622

回答

0

我發現很容易在SQL中使用Where語句構建動態查詢,例如:Tree.joins(:fruits).where("land_id = ?", land.id)等。下面是我昨天做的一些事情,可以幫助您瞭解我在說什麼,但是您需要將其推斷爲滿足您的需求:

query = '' 
counter = 1 
sets_of_data_ill_query.each do |set| 
    if counter == 1 
    query += "district = '#{set[0]}' AND second_district = '#{set[1]}'" 
    else 
    query += " OR district = '#{set[0].to_s}' AND second_district = '#{set[1]}'" 
    end 
end 
voters = Voter.where(query) 

注:我知道我查詢是安全的,所以我只是用原始信息,但你要做到這一點,因爲我在第一段中表現出與?轉義值,如果它的數據數據將由用戶輸入。此外,由於您要鏈接哪些語句,您希望使用「AND」而不是使用「OR」的位置,如果您需要循環訪問集合等。