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