未定义的方法begin_of_day用于带有ransacker自定义过滤器的字符串

时间:2018-05-24 06:29:44

标签: ruby-on-rails ruby activeadmin ransack

我收到了下面提到的错误。任何想法我怎么能解决它?

Path.Combine(string path1, string path2);
Path.Combine(string path1, string path2, string path3);
Path.Combine(string path1, string path2, string path3, string path4);
--> Path.Combine(params string[] paths);

代码:

Projects.rb(ActiveAdmin)

undefined method `beginning_of_day' for "2018-01-01":String
/lib/ransack_ext.rb
config.add_predicate old, arel_predicate: current
end
config.add_predicate 'gteq_datetime',
arel_predicate: 'gteq',
formatter: ->(v) { v.beginning_of_day }

Project.rb(模型)

filter :project_event_date, label: 'By Project Event Date', as: :date_range

4 个答案:

答案 0 :(得分:0)

根据docsbeginning_of_day()

  

将日期转换为时间(或必要时为DateTime),时间部分设置为当天的开头(0:00)

String不是Date。因此,将String转换为Date,你就应该好了。

答案 1 :(得分:0)

首先将字符串转换为日期,然后像这样应用beginning_of_day方法: -

Date.parse("2018-01-01").beginning_of_day

答案 2 :(得分:0)

这会对你有所帮助

ruby ransacker :project_event_date, type: :date do Arel.sql("project_events.event_date") end

ransacker阻止结果应使用Using Ransacker Guide上显示的Arel构建

active_admin具有谓词的自定义格式化程序,如
formatter: proc { |v| v.beginning_of_day }
所以你需要将传递的值转换为日期

最好的方法是向搜索者提供typeformatter

答案 3 :(得分:0)

在数据源中投射日期时间到日期字段为我解决了问题

相关问题