为了避免让最后一个问题充满编辑,我正在解决一个关于调试它的新问题。最初的问题是Neo4j gem - Plucking multiple nodes/relationships
这是我最终的结果。日检测存在一些缺陷,但作为查询,它现在可以正常工作。 @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。
在rails c中运行,当我运行Event.reminder
时,我得到了
TypeError: 0 is not a symbol
我的嵌套循环出了什么问题?
答案 0 :(得分:1)
@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
答案 1 :(得分:0)
我认为你只需要做一个正常的事情:
users.each do |user|
UserMailer.reminder(event,user).deliver
end