活动脚手架:使用时间戳在列上进行字段搜索

时间:2018-07-20 12:17:59

标签: ruby-on-rails activescaffold

我根据FieldSearch-API-Documentation在控制器中启用了字段搜索功能。

我在以下两列上启用了字段搜索

class FooController < ApplicationController
   active_scaffold 'foo' do |config|
     # allowed actions
     config.actions = [:create, :update, :delete, :field_search, :list, :nested, :show]

     # columns
     config.columns = [:date, :created_at]

     # searchable columns
     config.field_search.columns = :date, :created_at
     config.list.always_show_search = true

     # list columns
     config.list.columns = [:date, :created_at]

     [...]

   end
end

postgresql数据库中的列日期为date类型,而created_at列为timestamp类型。

使用上面的配置参数,我成功地在活动脚手架渲染的视图上获得了一个搜索表单。在搜索表单上,有一个带运算符(例如BETWEEN)的下拉列表和两个用于选择范围的输入控件。

现在的问题是,按日期搜索可以正常工作,而按created_at搜索则无法工作。

经过详尽的研究,我发现hint描述了活动脚手架默认使用datetime格式,该格式在./config/locales/en.yml下配置,并在我的情况下显示如下。

en:
   time:
       formats:
           default: "%Y%m%d%H%M%S"

显然,输入格式如何很重要。用于created_at搜索的搜索输入例如是从20180101000000到20181231000000。

Column-API-Documentation上,我发现了以下内容:

  

options [:format]可以设置为:       日期和时间列,它将用作I18n.localize的格式参数。

我不明白我必须在控制器的option参数中定义什么样的值?

config.columns[:created_at].options[:format] = ???

1 个答案:

答案 0 :(得分:0)

在写问题时才找到答案:-)

如果我在./config/locales/en.yml中定义了一个新条目,例如时间戳如下

en:
    time:
        formats:
             timestamp: "%Y%m%d%H%M"

并在我的控制器中执行以下操作

config.columns[:created_at].options[:format] = "timestamp"

然后我可以通过created_at成功地使用输入201801010000和201812310000进行搜索。