[英]Rails 3: Is it possible to access a model's attribute in a query?
對不起,如果這個問題聽起來很奇怪,但我正在研究 Rails,我還在學習行話。 基本上,我正在嘗試創建一個單通道查詢,該查詢在查詢的計算中使用模型屬性之一的值(假設這甚至是可能的)。
我有一個Tournament
model,它的start_date
屬性是DateTime
object。 我正在嘗試創建一個查詢,該查詢返回 start_date 不超過 1 小時 + 錦標賽長度的所有錦標賽,或者換句話說,所有尚未開始或已經開始但尚未開始的錦標賽一個多小時前結束。 我當前的查詢不起作用,看起來像這樣......
validTourneys = Tournament.where("start_date > (? - duration_in_mins)", (DateTime.now.utc - 1.hour))
其中duration_in_mins
是錦標賽 model 的 integer 屬性,但此查詢不起作用,它似乎一直在返回所有錦標賽。 我想在計算的(DateTime.now.utc - 1.hour)
部分中包含duration_in_mins
,但我不知道如何引用它,這就是為什么我將它包含在查詢的字符串部分中,希望那會奏效。 我至少在正確的軌道上嗎?
我應該提到我使用 SQLite 進行開發,使用 PostgreSQL 進行生產。
謝謝你的智慧!
問題是,如果你從 DateTime object 中減去分鍾,你減去的不是分鍾而是天。
# This works as expected
dt = DateTime.now # Thu, 28 Apr 2011 09:55:14 +0900
an_hour_ago = dt - 1.hour # Thu, 28 Apr 2011 08:55:14 +0900
# But, this does not...
two_hours_in_minutes = 120
two_hours_ago = dt - two_hours_in_minutes # Wed, 29 Dec 2010 09:55:14 +0900
在最后一個示例中,減去了 120 天而不是分鍾。 這可能也發生在您的查詢中。 您必須將duration_in_minutes
轉換為天數,然后減去。
我對 SQL 了解不多,無法直接回答您的問題(我認為這可能還取決於您使用的數據庫,因此您可能想提一下)。
但是,您是否考慮過將start_date
和end_date
作為 DateTime 列而不是start_date
和duration_in_mins
? 如果這將是一個常見的查詢,那肯定會提高性能,並使您的代碼更易於閱讀和理解。
只有當您的數據庫足夠聰明,知道如何添加(我假設)是 DateTime 和 integer 時,此查詢才會起作用。 而且我想不出一個數據庫可以按照你的編碼方式正確地做到這一點。 沒有數據庫會假設分鍾。 有些人可能會做滴答聲、秒數或天數。
這部分計算
(? - duration_in_mins)
將發生在數據庫上,而不是在 Ruby 領域。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.