我在单个字段中添加了名称,电子邮件和created_at的搜索。我可以在我的参数中获得搜索结果。例如,如果我搜索swapna,那么我的参数就像:Parameters: {"utf8"=>"✓", "user"=>{"search"=>"swapna"}}.
我添加了以下查询:Message.includes(:user).where("users.name LIKE ? OR messages.to LIKE ? OR messages.created_at LIKE ? " ,"%#{@query}%", "%#{@query}%", "%#{@query}%")
但在我的查询中添加搜索日期后,我收到错误:
ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: timestamp without time zone ~~ unknown
LINE 1: ...essages.to LIKE '%swapna%' OR messages.created_at LIKE '%swa
有人可以帮帮我吗。
答案 0 :(得分:0)
使用
"created_at = ?", @query
而不是
"created_at like ?", "%#{@query}%"
因为我认为您无法查询类似
的日期答案 1 :(得分:0)
请尝试以下代码,希望它适合您。 由于加入使用延迟加载,因此可能会出现轻微的性能问题。
@query = params [:search] @messages = Message.joins(:user).where(" user.name LIKE?OR messages.to LIKE?OR messages.created_at LIKE?","%#{@ query}% ","%#{@ query}%","%#{@ query}%")
答案 2 :(得分:0)
created_at字段是一个日期时间字段,因此搜索'喜欢'和' ='不行。因此您需要使用时间跨度来随时查找特定日期
。试试这个,我希望它有效。
#@query.to_date + 1.days returns next day with time 00:00:00
Message.includes(:user).where("users.name LIKE ? OR messages.to LIKE ? OR "messages.created_at >= ? and messages.created_at < ?", "%#{@query}%", "%#{@query}%", @query.to_date, @query.to_date+1.days)