【问题标题】:How to get earliest and latest dates for associated objects如何获取关联对象的最早和最晚日期
【发布时间】:2015-01-22 14:54:56
【问题描述】:

我正在开发一个 Rails 4 应用程序,我有两个模型。一个叫Project,另一个叫Task

Project 有很多 TasksTask 属于 Project

任务对象具有starts_atends_at 属性(日期时间)。 如何获取属于特定项目的所有关联任务中最早的starts_at 和最新的ends_at

我尝试了@project.tasks.max(:starts_at),但没有成功(出现错误)。

【问题讨论】:

  • 使用maximum 而不是maxmax 是数组最大值:[1,2].max
  • 是的,应该是maximum
  • 工作正常!请将您的答案添加为真实答案,我将使其正确。

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord


【解决方案1】:

使用maximum 而不是max

max 是数组最大值:[1,2].max == 2

http://api.rubyonrails.org/classes/ActiveRecord/Calculations.html#method-i-maximum

【讨论】:

    【解决方案2】:

    改编自 [Lars Haugseth's solution] 以查找下一个生日。

    模型.rb

    def latest_tasks
      todays_date = Date.today
      start_days_from_now = todays_date - starts_at
      ends_days_from_now = ends_at - todays_date
      if start_days_from_now < ends_days_from_now
        yearmmdd = starts_at.strftime('%Y%m%d')
      else
        yearmmdd = ends_at.strftime('%Y%m%d')
      end
      return Date.parse("#{yearmmdd}")
    end
    

    控制器.rb

    @project.tasks.where('starts_at >= ? or ends_at >=? ', Date.today, Date.today).sort_by(&:latest_tasks)
    

    【讨论】:

      【解决方案3】:

      我知道这是一个老问题,但对于任何想要完成此任务的人来说,您都可以这样做:

      • @project.tasks 中获取所有starts_atends_at 值的数组:

        starts_at_values = @project.tasks.pluck(:starts_at)

        ends_at_values = @project.tasks.pluck(:ends_at)

      • 选择starts_at值最早的Task记录:

        earliest_task = @project.tasks.select{|task| task.starts_at == starts_at_values.min}

      • 选择ends_at值最新的Task记录:

        latest_task = @project.tasks.select{|task| task.starts_at == ends_at_values.max}

      如果您只需要获取最早和最晚的时间,您可以这样做:

      earliest_time = starts_at_values.min
      
      latest_time = ends_at_values.max
      

      【讨论】:

        猜你喜欢
        • 2021-09-29
        • 2021-06-29
        • 2021-06-19
        • 2021-08-31
        • 1970-01-01
        • 2010-10-21
        • 1970-01-01
        • 1970-01-01
        • 2017-02-18
        相关资源
        最近更新 更多