поиск в базе данных с целыми часами - PullRequest
0 голосов
/ 13 сентября 2018

У меня есть пул базы данных для регистрации, содержащей такие атрибуты, как электронная почта, ip, create_at и т. Д., И я хочу быть в курсе динамического поиска на основе количества часов в Time.now, например, поиск записи записи 2 часа назад, без жесткого кодирования тех часов, но мое решение не работает и болен. Как мне этого добиться? Ниже беспорядок, который я сделал:

traffics_controller.rb

class TrafficsController < BaseController
  def show
    @search_term = params[:search_term]
    @traffic =
        if params[:search_term] == 'time_calculated'
          SignupHistory.time_calculated
        else
          SignupHistory.all 
        end
  end
end

модель

class SignupHistory < ActiveRecord::Base
  def self.time_calculated
    where('created_at > ?', Time.now - "#{time_difference}".hour)
  end
end

show.html.slim

# search form rows
.row
  .panel.panel-primary
    .panel-heading
      span = t('.search')
    .panel-body
      = form_tag admin_statistic_traffics_path, method: :get
        .col-xs-4 = text_field_tag :search_term, @search_term
        .col-xs-12.col-xs-offset-1 = submit_tag 'Search'
# Table rows
.row
  .panel.panel-primary
    .panel-heading
      span = t('admin_header.traffics')
    .panel-body
      = table_for(@traffic, class: 'table table-condensed table-hover') do |t|
        - t.column :id, 'S/N', class: 'col-xs-1'
        - t.column :email, 'Email', class: 'col-xs-2'
        - t.column :created_at, 'Signed in Date', class: 'col-xs-3' do |x|
          = x.created_at.strftime('%B %e, %Y at %I:%M %p')
        - t.column :login_location, 'Login Location', class: 'col-xs-3'

Я хочу иметь возможность поставить 1 в поле поиска и выполнить поиск, чтобы извлечь записи в таблице, которая была создана 1 час назад с использованием поля created_at. Но это не работает. Любая помощь будет оценена.

1 Ответ

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

Очень простым решением может быть не использование строки time_calculated в качестве триггера для возврата только последних SignupHistory записей, а фактическое существование числа в этом поле.

# in your controller
def show
  @search_term = params[:search_term]
  @traffic =
      if params[:search_term].to_i > 0
        SignupHistory.time_calculated(params[:search_term])
      else
        SignupHistory.all 
      end
end

# in your model
def self.time_calculated(number)
  where('created_at > ?', number.to_i.hours.ago)
end
...