Ruby on rails 带有ransacker自定义筛选器的字符串的未定义方法开始\u天的\u
我得到下面提到的错误。你知道我怎么修吗Ruby on rails 带有ransacker自定义筛选器的字符串的未定义方法开始\u天的\u,ruby-on-rails,ruby,activeadmin,ransack,Ruby On Rails,Ruby,Activeadmin,Ransack,我得到下面提到的错误。你知道我怎么修吗 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_
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 }
代码:
Projects.rb(ActiveAdmin)
Project.rb(模型)
根据,一天的开始()
:
将日期转换为时间(或DateTime,如果需要),时间部分设置为一天的开始(0:00)
字符串
不是日期
。因此,将您的字符串
转换为日期
,您就可以开始了。首先将字符串转换为日期,然后应用如下的开始日期方法:-
Date.parse("2018-01-01").beginning_of_day
这对你有帮助
ruby
ransacker:project\u event\u date,类型::date do
Arel.sql(“project\u events.event\u date”)
结束
如图所示,应使用Arel创建ransacker块结果
active\u admin具有类似谓词的自定义格式化程序formatter:proc{v|v.start_of_day}
所以您需要将传递的值转换为日期
最好的方法是为ransacker提供
类型
或格式化程序
在数据源中从datetime到date转换字段解决了我的问题是的,在字符串
上停止调用开始一天
。这行不通。你的事件\u日期列类型是什么?换成date@seethrough它的日期类型是将日期(project\u events.event\u date)
而不是“project\u events.event\u date”
@看清楚它不起作用我该怎么做?也许你会觉得有用。特别是第一项。@jvillian smart comment,haha@jvillianto_date可以将其转换为日期。但是我应该在哪里调用这个to_date函数呢<代码>搜掠者:项目事件日期做“项目事件.事件日期”结束他应该在哪里应用这个?
has_many :project_events, dependent: :destroy
ransacker :project_event_date do
"project_events.event_date"
end
Date.parse("2018-01-01").beginning_of_day