0

只是想知道是否有任何功能,可以這樣做:Rails的找到狀態

 
MyModel.find_by_conditon(method_a - method_b > 0)

MyModel.class

 
def method_a 
    next_service_date.to_i 
end 

def method_b 
    last_service_date.to_i 
end 
 
def next_service_date 
    service_date.present? ? calculated_time_estimation : row_time_estimation 
end 
def calculated_time_estimation 
    service_date + calculated_service_period 
end 
def calculated_service_period 
     case(service_frequency_period) 
     when 'Year' 
     service_frequency_number.to_i.year 
     when 'Month' 
     service_frequency_number.to_i.month 
     when 'Week' 
     service_frequency_number.to_i.day * 7 
     when 'Day' 
     service_frequency_number.to_i.day 
     end 
end 

service_frequency_numberservice_frequency_periodservice_date是爲MyModel

屬性
+0

您可以更好地瞭解您嘗試解決的問題嗎?問題和定義有點模糊。 last_service_date是否等同於service_date?另外如何定義row_time_estimate? – ashoda

回答

1

假設method_amethod_b實際上是屬性,你可以這樣做:

MyModel.where('method_a - method_b > ?', 0) 

編輯

我認爲唯一的您將能夠在計算字段上查詢的方式是將計算移至數據庫,其中你將有一個標量函數來返回結果。那麼你可以做MyModel.where('next_service_date_on_db(service_date) > 0')。不幸的是,這將使您與特定於數據庫的實現相關聯,但如果沒有服務器端功能,您將無法以這種方式進行查詢。

現在,如果你有整個集合,你可以根據這些條件進行過濾,但是你必須加載整個集合。例如:

MyModel.all.select {|m| m.method_a - m.method_b > 0} 

#all返回所有對象的陣列,並基於所述塊的條件選擇濾波器。不幸的是,這個解決方案加載了所有的記錄來排序應用程序端。

+0

不幸的是,method_a和method_b不是attrubutes,只是更新了一個問題 –

+0

'next_service_date'是屬性嗎? –

+0

剛剛更新了問題 –

0

不完全確定y你試圖達到..但你可能不得不求助於SQL?

(?,什麼是method_a和b)

MyModel.where('? > 0', (method_a - method_b)) 
+1

這將如何工作? 'method_a'和'method_b'是'MyModel'上的實例方法。 –

+0

我的印象是,method_a和method_b返回某種類型的整數,當它們合併時將用於比較「大於0」。 – Jamsi