0

我已經得到了它具有以下的表:的Rails的ActiveRecord/SQL查詢的最佳實踐

  • show_days_before_start(整數)
  • START_TIME(DATETEXT)

的目的「 show_days_before_start「列是將日期添加到」start_time「以確定記錄應該何時開始出現在結果中(如果超出此時間則不應顯示)(此列可以具有從7到21的值),並且「start_time」只是事件t的日期時間戳他的記錄是指開始。

我需要一個查詢來執行上述操作,並返回相關記錄。在查詢設計方面,最好的方法是什麼?

回答

2

這是錯誤的方式來做到這一點。 將數據集插入數據庫時​​應該生成顯示日期!在模型

add_column :table_name, :display_time, :timestamp 

然後添加attr_readerattr_accessordisplay_time_reader

attr_accessor :display_time_reader 
attr_reader :display_time_reader 

然後你定義display_time_reader=方法:添加一個名爲display_time

def display_time_reader=(days_before_start) 
    self.display_time=self.start_time-days_before_start.days 
end 

然後添加一個text_field :display_time_reader (你也可以下拉值爲7..21)到你的_form.html.erb,當你輸入5時,它會將start_date - 5天保存到display_time字段。那麼你可以查詢:

ModelName.where("display_time > ?", Time.now) 

這將是一個乾淨的方式來處理這個問題!

+0

感謝您的回覆。我收到以下錯誤'未定義的方法'天爲 「7」:String' – Elliot 2012-01-13 23:25:08

+0

而不是'self.display_time = self.start_time-days_before_start.days'寫'self.display_time = self.start_time-days_before_start.to_i。天' – davidb 2012-01-13 23:32:24

+0

我現在看到這個錯誤:'當你沒有想到它時,你有一個零對象! 您可能已經預期了Array的一個實例。 錯誤發生時,評估無' - – Elliot 2012-01-13 23:35:56