如何使用Ransack在日期字段中搜索特定的(出生日期)年份?
目前代码如下:
控制器的
J = [-x.^b -a.*x.^b.*log(x)]
视图的
tests/pdf2svg/pdf2svg.c:24:10: fatal error: 'glib.h' file not found
#include <glib.h>
^~~~~~~~
1 error generated.
ERROR:root:compiler frontend failed to generate LLVM bitcode, halting
以上似乎没有进行任何过滤,很可能是因为我将字符串与日期进行比较?
有什么想法吗?
答案 0 :(得分:2)
对于ransack,您需要在模型中使用Arel来处理字符串和Datetime的转换:
ransacker :birthdate_cont do
Arel.sql('date(birthdate_cont)')
end
另外,我觉得两个字段允许在两个日期(开始和结束)之间进行选择将是更好的选择。
现在,在Ransack之外(如果编写自己的搜索方法),如果搜索是您的运动员课程中的课程方法:
首先,如果是文本字段,则需要指定格式。您可以使用DateTime.parse
并使用它。
其次,对于搜索,您可以获取该输出并创建一个新的DateTime对象,如:
User.where(:birthdate => Datetime.new(2018, 01, 10, 22, 37, 2 ))
但是我觉得你的查询应该在该特定日期搜索位于00:00:00和23:59:59之间的任何DateTime 如果你使用DateTime而不是Date作为实体类型(这将是如果您正在为数据库使用最佳实体类型,那么这是一个值得思考的好地方)。所以查询可能就像;
您的搜索类方法中的 User.where(:birthdate => Datetime.new(2018, 01, 09, 0, 0, 0)..Datetime.new(2018, 01, 10, 23, 59, 59 ))
。为了实现这一点,我假设搜索是一种类方法,您可以根据参数进行更改。
答案 1 :(得分:0)
如果您有datetime列和日期输入,例如dd/mm/yyyy
,则可以使用此ransacker:
# your_model.rb
ransacker :created_on, formatter: proc { |value| Date.parse(value).strftime('%Y-%m-%d') } do
Arel.sql("DATE(#{table_name}.created_at)")
end
给出输入日期01/10/2018
,它的搜索方式如下:
SELECT * FROM table WHERE DATE(table.created_at) = '2018-10-01'