2013-02-05 51 views
1

好了,所以它已經有3個令人恐懼的日子,並且我確定它的一些簡單的東西,我似乎無法弄清楚。Rails查詢變成空的,但如果在sql控制檯中被serched,相同的查詢檢索記錄

創建範圍後,我遇到了一個問題,以便在兩天之內返回所有用戶的生日以及其他一些條件。該信息應該呈現給用戶儀表板。

這是什麼讓我困擾,如果我刷新頁面,找到0條記錄。如果我在rails控制檯(開發環境)中運行作用域,它也會返回0條記錄。但是,如果我從控制檯(活動記錄器是)複製查詢並將其直接放入我的sql客戶端,它將返回正確的記錄。這個範圍與其他一些範圍是鏈接的,但是如果我從查詢鏈中刪除這個範圍,查詢就可以工作,它不會過濾出生範圍的日期,就像我希望這個範圍做的那樣。

是的,sql客戶端在同一個數據庫上。

範圍:

where(
    "(date_of_birth <= ?) OR DATE_ADD(date_of_birth, INTERVAL ? YEAR) BETWEEN ? AND ?", 
    min_age.years.ago.to_date, 
    min_age, 
    beginning_of_month, 
    end_of_month 
) 

查詢:

SELECT drivers * FROM drivers WHERE((DATE_OF_BIRTH < = '1990年2月5日')OR DATE_ADD (date_of_birth,INTERVAL 23 YEAR) '2013-04-01'和'2013-04-30')AND(drivers.id NOT IN(SELECT driver_id從follow_ups其中TEAM_ID = 2))AND (average_miles_per_day> = 0.35)AND(TRAVEL_TIME < 2000)和 (TRAVEL_TIME +(average_miles_per_day * 84)> = 2000)

時間不限導軌嘗試執行該查詢它不起作用。在sql客戶端執行這個查詢時,它就像一個魅力一樣。

+0

在你的SQL查詢中,你也顯示了一個子查詢,但不是在Rails代碼中。你在你的紅寶石堆棧中運行一個?此外,當您在rails中調用代碼時,您應該能夠在日誌中看到查詢。也許只有當你通過服務器運行rails應用程序時,但它可能會有所幫助。 – agmcleod

+0

是的,還有其他作用域作爲子查詢與上述查詢鏈接在一起。日誌和控制檯都顯示用於執行搜索的查詢。在我對上述問題的描述中,我解釋說我從日誌中複製了查詢(完全是這樣),並在一個返回了正確記錄的sql客戶端中成功執行了查詢。 – n0denine

+0

啊好吧,對不起,我錯過了。想知道是否由於附加的括號或類似的事情而發生了一些條件差異。 – agmcleod

回答

0

也許...字符串到日期轉換有問題。嘗試使用STR_TO_DATE()函數在模型中進行轉換。請爲每個日期做...讓我知道它有幫助。

+0

這是我懷疑的,但我還沒有玩過不同的方法。我現在試試你的建議。 – n0denine

+0

這不是答案。但我只知道我的問題是什麼。就像大多數人懷疑的一樣(甚至是我自己),它與sql查詢無關。它必須處理被調用的Class方法以及它如何操縱查詢。 – n0denine

+0

gr8聽到你解決了:) – MiGro