Neo4j gem - 使用索引处理集合查询



为了避免最后一个问题充满编辑,我正在衍生出一个新问题来调试这个问题。最初的问题是这个 Neo4j 宝石 - 采摘多个节点/关系

这就是我最终的结局。日检测存在一些缺陷,但作为查询,它现在确实有效。@collection返回大量书面内容。

Event.rb

def self.reminder
    one_day = 1.day.to_i
    time = Time.zone.now.to_i
    @collection = Event.as(:e).where( "( ( e.date_start - {current_time} ) / {one_day_p} ) < {one_p} " ).users(:u, :rel).where(setting_reminder: true).rel_where(reminded: false ).params(one_day_p: one_day, current_time: time, one_p: 1).pluck(:e, 'COLLECT(u)', 'COLLECT(rel)')
    @collection.each do |event, users, rels|
      users.each_with_index do |user, i|
        UserMailer.reminder(event,user[i]).deliver
      end
      rels.each_with_index do |rels, i|
        rels[i].reminded = true
      end
    end
end

我最初像最后一个答案一样拥有它,但我认为我需要跟踪用户的索引和嵌套在每个块中的 rel。

在轨道 c 中运行,当我运行时Event.reminder我得到

TypeError: 0 is not a symbol

我的嵌套循环有什么问题?

@collection是一个包含其他数组的大数组。你不能做@collection.each do |event, users, rels|,你需要返回其中的每个数组,然后遍历这些数组。两种方式:

@collection = Event.as(:e).where( "( ( e.date_start - {current_time} ) / {one_day_p} ) < {one_p} " ).users(:u, :rel).where(setting_reminder: true).rel_where(reminded: false ).params(one_day_p: one_day, current_time: time, one_p: 1).pluck(:e, 'COLLECT(u)', 'COLLECT(rel)')
@collection.each do |row|
  event = row[0]
  users = row[1]
  rels  = row[2]
  users.each_with_index do |user, i|
    UserMailer.reminder(event, user).deliver
    rels[i].reminded = true
    rels[i].save
  end
end
# OR
events = collection.map { |row| row[0] }
users  = collection.map { |row| row[1] }
rels   = collection.map { |row| row[2] }
events.each_with_index do |event, i|
  UserMailer.reminder(event, users[i]).deliver
  rels[i].reminded = true
  rels[i].save
end

我认为你只需要做一个正常的每个:

  users.each do |user|
    UserMailer.reminder(event,user).deliver
  end

相关内容

  • 没有找到相关文章

最新更新