【问题标题】:Render event from postgres if the date equals today's date or in the future如果日期等于今天或将来,则从 postgres 渲染事件
【发布时间】:2019-11-21 22:14:16
【问题描述】:

我试图只显示我的数据库中日期从今天开始的事件。我表中的日期列是“start_date”。在我的事件控制器中,我有:

if @events.start_date >= Date.today 
  @events = Event.order('start_date ASC')
end 

在“if”语句的行中,我不断收到错误“undefined method `start_date' for nil:NilClass”。 我敢肯定,当我在反复试验时,我也会产生语法/语法问题。我在看什么?

【问题讨论】:

    标签: ruby-on-rails ruby postgresql activerecord


    【解决方案1】:

    它抛出一个NoMethodError,因为@events 的值尚未定义或者它的值是nil

    defined?(@events)
    # nil
    @events.start_at
    # NoMethodError: undefined method `start_at' for nil:NilClass
    nil.start_at
    # NoMethodError: undefined method `start_at' for nil:NilClass
    

    为此,您可以使用where过滤start_date 等于或大于当前时间戳的行:

    @events = Event.where('start_date >= CURRENT_TIMESTAMP').order(start_date: :asc)
    

    【讨论】:

    • 非常感谢您的回答。一旦我将您建议的代码添加到控制器中,我就会收到以下错误:“错误:运算符不存在:字符变化> =日期第 1 行:选择“事件”。* FROM“事件”在哪里(开始日期> =当前... “有什么想法吗?
    • 它是start_date date 数据类型列吗?试试Event.where('start_date::date >= CURRENT_DATE')
    • 欢迎您!可以是start_date::date >= CURRENT_DATEstart_date >= CURRENT_TIMESTAMP。一种是将列值转换为日期以与当前日期进行比较,另一种是直接与当前时间戳进行比较。
    猜你喜欢
    • 1970-01-01
    • 2016-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    相关资源
    最近更新 更多