mysql - Rails - 按 datetime_local_field 搜索

标签 mysql ruby-on-rails ruby ruby-on-rails-4

我有一个名为“test”的事件记录。每个测试都有一个 StartTime 和 EndTime,它们在 MySQL 数据库中采用日期时间格式。我有一个 View ,其中包含一个带有 2 个 datetime_local_fields 的搜索表单:

<%= form_for :test, :url => { :action => :search }, :method => 'get' do %>
  <div class="input-append">
    <%= datetime_local_field :StartDate, params[:search] %><br />
    <%= datetime_local_field :EndDate, params[:search] %><br />
    <button class="btn" type="submit">Search</button>
  </div>
<% end %>

这是来自tests_controller.rb的关联方法:

def search
  if :StartDate
    if :EndDate
      @tests = Test.searchRange(:StartDate, :EndDate).order("StartTime DESC")
    end
  end
end

来自 test.rb:

def self.searchRange (date1,date2)
  where(['StartTime >= ? and EndTime <= ?', date1, date2])
end

我每次都返回 0 个结果!我不知道出了什么问题。我的数据库中有一个条目,其中开始时间和结束时间均为 2015-10-22,我使用参数 2015-06-01 和 2015-12-10 进行搜索。为什么没有返回匹配的记录?

最佳答案

Controller 中的

:StartDate 不是您所期望的:它只是符号 :StartDate。您将需要类似: params[:StartDate] 来访问从表单发送的参数:

def search
  @tests = Test.scope
  @tests = @tests.from_date(params[:StartDate]) if params[:StartDate]
  @tests = @tests.to_date(params[:EndDate])     if params[:EndDate]
  @tests = @tests.order("StartTime DESC")
end

我会使用 scopes在模型中而不是类方法中:

scope :from_date, ->(date) { where('StartTime >= ?', date) }
scope :to_date,   ->(date) { where('EndTime <= ?', date) } 

关于mysql - Rails - 按 datetime_local_field 搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34230789/

相关文章:

ruby-on-rails - 一个 has_many :through Relationship 的 Rails RSpec 测试

ruby-on-rails - rails 阻止代码中其他地方的更改记录

ruby-on-rails - 如何在Rails中使用 Elasticsearch 为结果实现部分单词匹配

css - Watir:第一个表格单元格内的 a-href 选择器

ruby-on-rails - 如何在生产后台启动 Foreman 服务器?

mysql - Wordpress - 数据库迁移导致 Accordion 插件内容重置/消失

MySQL 存储过程说别名在 select 语句中未定义

mysql - PhpStorm - 如何通过 Docker 连接到 MySQL

java mysql 计算行数

ruby-on-rails - 如何使用延迟加载程序捕获 Capybara Feature JS 测试的服务器端错误?