Поиск метки времени с запросом, но игнорируя время - PullRequest
0 голосов
/ 12 сентября 2018

гении!

поэтому в моем проекте я пытаюсь использовать запрос для поиска в моей базе данных с одной таблицей по метке времени, которая имеет следующий формат: «2018-05-01 00:28:43». В моем запросе я хотел бы игнорировать время и отобразить все результаты, для которых выбрана дата в качестве метки времени.

Сейчас я все еще учусь, много пробовал, но не смог придумать ответ. Вот где я нахожусь:

def index
  if params[:query].present?
    @reports = Report.where(created_at: params[:query])
  else
    @reports = Report.all
  end
end

Ответы [ 4 ]

0 голосов
/ 14 сентября 2018

Вы можете попробовать это:

def index
  if params[:query].present?
    date = Date.parse(params[:query])
    @reports = Report.where(created_at: date.midnight..date.end_of_day)
  else
    @reports = Report.all
  end
end
0 голосов
/ 12 сентября 2018

Используйте функцию SQL date().

def index
  @date = Date.parse(params[:query]) rescue nil
  if @date
    @reports = Report.where("date(created_at) = ?", @date)
  else
    @reports = Report.all
  end
end

Не передавайте params[:query] напрямую в качестве аргумента для предложения where, сначала проанализируйте его для Date объекта, чтобы убедиться, что это действительно дата.

0 голосов
/ 12 сентября 2018

Я бы сделал что-то вроде этого:

def index
  if params[:query].present?
    # gives a date without a time 
    date = Date.parse(params[:query])
    @reports = Report.where(created_at: date..(date + 1.day)) 
  else
    @reports = Report.all
  end
end
0 голосов
/ 12 сентября 2018

Вы можете попробовать что-то вроде этого:

def index
  if params[:query].present?
    @reports = Report.where(created_at: (Time.new(params[:query]).beginning_of_day()..Time.new(params[:query]).end_of_day()).all
  else
    @reports = Report.all
  end
end

Если вам нужно отформатировать результаты, вы можете проанализировать столбец, используя all.map (), например,

Report.where(created_at: (Time.new(params[:query]).beginning_of_day()..Time.new(params[:query]).end_of_day()).all.map{|report| report.created_at = Time.new(report.created_at).your_format }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...