【问题标题】:Search on date field in ruby on rails在 ruby​​ on rails 中搜索日期字段
【发布时间】:2016-01-28 09:45:30
【问题描述】:

我有姓名、电子邮件和 created_at 的搜索字段。我添加了搜索姓名和电子邮件字段。对于日期字段,我添加了提示文本“日期应采用 MM-DD-YYYY 格式”,并且我希望用户仅以这种格式输入日期。如果以该格式输入日期,那么我想显示该日期的所有记录。我的搜索结果采用字符串格式,例如“12-22-2015”。我希望显示其 created_at 字段的所有日期。对于姓名和电子邮件,我的查询是:@messages = Message.includes(:user).select('messages.*, users.name').where("users.name ilike ? OR messages.to ilike ? " ,"%#{@query}%", "%#{@query}%").paginate(:page => params[:page], :per_page => 5)。还需要修改以上对 created_at 字段的查询。

【问题讨论】:

    标签: ruby-on-rails-3.2


    【解决方案1】:

    试试下面...

    @messages = Message.includes(:user).select('messages.*, users.name').where("users.name ilike ? OR messages.to ilike ? OR messages.created_at like ? " ,"%#{@query}%", "%#{@query}%", Date.parse("%#{@query}%", '%MM-%DD-%YYYY')).paginate(:page => params[:page], :per_page => 5)
    

    【讨论】:

    • ilike 和 like 不适用于日期字段。它给出了错误: ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: timestamp without time zone ~~* unknown
    • 仍然出现错误:ActiveRecord::StatementInvalid: PG::UndefinedFunction: ERROR: operator does not exist: timestamp without time zone ~~* unknown LINE 1: ...es.to ilike ' %06-01-2015%' OR messages.created_at ilike '201...
    【解决方案2】:

    尝试以下查询以显示相同的日期记录

    @messages = Message.includes(:user).select('messages.*, users.name').where("users.name ilike ? OR messages.to ilike ? OR date(messages.created_at) = ? " ,"%#{@query}%", "%#{@query}%", "#{@query.to_date}").paginate(:page => params[:page], :per_page => 5)
    

    【讨论】:

    • 我的@query 为:“10-07-2015”,格式为 MM-DD-YYYY。我尝试了您的查询,但结果为空白。
    • 这个查询语法对我来说绝对没问题。实际上“10-07-2015”是一种字符串,在没有转换查询的日期时间类型下创建。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 2012-07-19
    • 1970-01-01
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多