如何使用case语句和字符串匹配ruby

时间:2014-05-21 20:33:45

标签: ruby switch-statement

def self.determine_created_at(created_at)
            Rails.logger.info(created_at)
    case(created_at)
    when "Today"
        where(created_at: Date.today)
    when "Yesterday"
        where(created_at: Date.yesterday)
    when "This Week"
        where(created_at: (Date.today.at_beginning_of_week..Date.today.at_end_of_week))
    when "This Month"
        where(created_at: Date.today.at_beginning_of_month..Date.today.at_end_of_month)
    when created_at.upcase.include?("MONTHS")
        where(created_at: (created_at.split[1].to_i.month.ago.to_date.beginning_of_month..Date.today.end_of_month))
    when created_at.match(/Hours/) 
        Rails.logger.info "INSIDE HOURS"
        where(created_at (created_at.split[1].to_i.hours.ago..DateTime.now))
    when created_at.upcase.include?("MINUTES")
        where(created_at: (created_at.split[1].to_i.minutes.ago..DateTime.now))
  end
end

这是我用于小型过滤器实现的代码。当我发送像8 hours ago这样的字符串时,它无法正常工作。这是未选择的必需案例,并且未打印INSIDE HOURS。 “分钟”和“月份”都不起作用。其余的都在工作。

1 个答案:

答案 0 :(得分:0)

正则表达式直接在when语句的case子句中指定:

case created_at
...
when /hours/
...
end