在rails上的ruby中搜索名称,电子邮件和created_at

时间:2016-01-27 07:38:51

标签: ruby-on-rails-3.2

我在单个字段中添加了名称,电子邮件和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

有人可以帮帮我吗。

3 个答案:

答案 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)