簡體   English   中英

Rails 3:是否可以在查詢中訪問模型的屬性?

[英]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_dateend_date作為 DateTime 列而不是start_dateduration_in_mins 如果這將是一個常見的查詢,那肯定會提高性能,並使您的代碼更易於閱讀和理解。

只有當您的數據庫足夠聰明,知道如何添加(我假設)是 DateTime 和 integer 時,此查詢才會起作用。 而且我想不出一個數據庫可以按照你的編碼方式正確地做到這一點。 沒有數據庫會假設分鍾。 有些人可能會做滴答聲、秒數或天數。

這部分計算

(? - duration_in_mins)

將發生在數據庫上,而不是在 Ruby 領域。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM