【问题标题】:Rails 5.1.: get records from association for each datetime intervalRails 5.1.:从关联中获取每个日期时间间隔的记录
【发布时间】:2017-09-27 06:17:39
【问题描述】:

我有一个名为 Task 的模型,方法是 dates,它给了我这个输出(它可以是不同的和多个 DateTime 间隔):

[{:from=>2017-09-04 00:00:00 +0300, :to=>2017-09-04 05:59:59 +0300},
 {:from=>2017-09-05 12:00:00 +0300, :to=>2017-09-05 19:59:59 +0300}

然后在同一个模型中还有另一种方法inventory,对于每个task,我想获取相应的Inventory模型记录。

目前我正在尝试做这样的事情:

self.inventories.where(date: self.from..self.to)

这不起作用,因为from 和to 来自上面的数据结构,而我的数据库中没有这样的列。我已经在我的模型中设置了适当的关联,我可以做到self.inventories。

有没有办法进行 Rails 查询,以便为我的每个 dates 间隔获取匹配记录?谢谢。

【问题讨论】:

    标签: ruby-on-rails datetime rails-activerecord ruby-on-rails-5.1


    【解决方案1】:

    如果您询问如何访问数组中的数据,您可以遍历每个数据。

    def self.dates
      #generate intervals as array of hashes
    end
    
    def self.inventories
      [].tap do |inventories|
        dates.each do |date|
          from = date[:from]
          to = date[:to]
          inventories << self.inventories.where(date: from..to)
        end
      end
    end
    

    并确保使用#flatten,因为它会嵌套在数组中

    inventories.flatten

    希望对你有帮助

    【讨论】:

    • 谢谢,它似乎正在工作。我相信您的意思是 inventories.flatten 必须用于结果数据,对吧?
    • 是的,您需要使用#flatten 来删除嵌套数组
    猜你喜欢
    • 2020-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-30
    • 2021-06-18
    • 2019-03-14
    • 2011-08-12
    相关资源
    最近更新 更多