我根据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的类型为date,列created_at的类型为timestamp。
使用上面的配置参数,我成功地在活动scaffold渲染的视图上获得了一个搜索表单。在搜索表单上,有一个带有运算符(例如BETWEEN(的下拉列表和两个用于选择范围的输入控件。
现在的问题是,按日期搜索很好,而按created_at搜索不起作用。
经过详尽的研究,我发现了一个提示,它描述了活动scaffold在默认情况下使用在下配置的日期时间格式/config/lotes/en.yml,在我的例子中显示如下。
en:
time:
formats:
default: "%Y%m%d%H%M%S"
显然,输入格式是什么并不重要。created_at搜索的搜索输入是:从20180101000000到20181231000000。
在第-API-列文档中,我发现了以下内容:
选项[:format]可以设置为:日期和时间列,并且它将用作I18n.localize的格式参数来格式化它们。
我不明白我必须在控制器内的选项参数中定义什么样的值?
config.columns[:created_at].options[:format] = ???
刚在写问题时找到答案:-(
如果我在中定义/config/locates/en.yml一个新条目,例如下面的时间戳
en:
time:
formats:
timestamp: "%Y%m%d%H%M"
并在我的控制器中执行以下
config.columns[:created_at].options[:format] = "timestamp"
则我能够通过created_ at以输入201801010000和201812310000成功地进行搜索。