Лучшая практика Rails ActiveRecord / SQL Query - PullRequest
0 голосов
/ 13 января 2012

У меня есть таблица со следующими столбцами:

  • show_days_before_start (integer)
  • start_time (DATETEXT)

Цель столбца «show_days_before_start» состоит в том, чтобы добавить дни в «start_time», чтобы определить, когда запись должна начать появляться в результатах (если она выходит за пределы этого времени, то она не должна отображаться) (этот столбец может иметь значение от 7 до 21), а start_time - это просто отметка даты и времени, когда начинается событие, на которое ссылается запись.

Мне нужен запрос, чтобы выполнить вышеизложенное и вернуть соответствующие записи. Каков наилучший способ приблизиться к этому с точки зрения дизайна запросов?

1 Ответ

2 голосов
/ 13 января 2012

Это неправильный способ сделать это.Вы должны сгенерировать дату показа при вставке набора данных в базу данных!Добавьте столбец с именем display_time:

add_column :table_name, :display_time, :timestamp

Затем в модели добавьте attr_reader и attr_accessor для display_time_reader

attr_accessor :display_time_reader
attr_reader :display_time_reader

Затем определите display_time_reader=Метод:

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) 

Это был бы чистый способ решить эту проблему!

...