这是不可能的,因为它是现在,但我有像这样的查询
events = Event.as(:e).where("(( e.date_start - {current_time} )/{one_day_p}) < 1 ").users(:u, :rel).where("rel.reminded = {reminded_p}" ).params(reminded_p: false, one_day_p: one_day, current_time: time).pluck(:e,:u, :rel)
我们的目标是获得events
,其中起始日期不到一天的时间。 可以想像我试图拔掉的情况下,用户和关系。 我需要做的,每个不同的动作。
我需要得到所有users
的每一个event
,并执行针对每个用户的电子邮件操作。 在这一行动中,电子邮件需要访问该event
。
接下来,我需要更新rel.reminded
属性为true
。
有没有一种方法能够同时摘下这一切,能够组织和完成这些任务? 我开始单独这样做,但我必须做出额外的查询来做到这一点。 例如
events = Event.as(:e).where("(( e.date_start - {current_time} )/{one_day_p}) < 1 ").users(:u, :rel).where("rel.reminded = {reminded_p}" ).params(reminded_p: false, one_day_p: one_day, current_time: time).pluck(:e)
然后我要
events.each do |event|
# do stuff
end
# do another query that is associated and do more stuff
更新:
合并的答案,我有这样的事情没有清理时间的方法呢。 我在哪里搜索用户,因为我需要在后面的电子邮件功能因素在增加。 所以,我不知道这是否是更有效的把它列入查询VS做的每用户之外。
@collection = Event.as(:e).where("(( e.date_start - {current_time} )/{one_day_p}) < 1 ").users(:u).where(setting_reminder: true).rel_where(reminded: false ).params(one_day_p: one_day, current_time: time).pluck(:e, 'COLLECT(u)', 'COLLECT(rel)')
但rel
没有与此查询定义。
首先,如果你使用的宝石V4,使用rel_where
而不是where
与你们的关系是一个字符串!
你应该能够改变你的勇气来pluck(:e, 'COLLECT(u)', 'COLLECT(rel)')
它会给你的事件,用户和RELS的一大枚举,父阵列的所有分组基于事件。 它会组织这样的:
[
[event1, [user1a, user1b, user1c], [rel1a, rel1b, rel1c]],
[event2, [user2a, user2b, user2c], [rel2a, rel2b, rel2c]]
]
每个相对的位置其用户相匹配,所以rel1a
是事件之间的关系user1a
。
您可以设置到@collection = my_big_query
然后做@collection.each do |event, users, rels|
通过您的视图循环。 你会做each_with_index
用户和用户的索引将对应于内的位置rels
。 它会是这个样子:
<%= @collection.each do |event, users, rels| %>
<%= event.name %>
<% users.each_with_index do |user, i| %>
<%= user.name %> said they were attending at <%= rels[i].confirmed_at %>.<br />
<% end %>
<% end %>
我也想帮腔上几个百分点。 您应该能够使用ActiveSupport使查询更容易这样的一部分:
Event.as(:e).where("date_start < {date_threshold}").params(1.day.from_now)
此外,为了使它不那么杂乱我没有看到任何把问题.where("rel.reminded = false")
或使用rel_where(reminded: false)
克里斯建议)。 这不是从用户传递的数据,并没有在当你调用查询不同时代的变化,所以它应该是一样有效。
您可能还需要使用新的查询链接在创业板上市的V4定义unreminded_users
这样的方法:
class Event
def self.unreminded_users
all.rel_where(reminded: false)
end
end
我其实没有尝试过做一个rel_where
在查询链这样的,但我怀疑它会工作。 然后你就只有这个:
Event.as(:e).where("e.start_date < {date_threshold}").params(date_threshold: 1.day.from_now)
.users(:u, :rel).rel_where(reminded: false)
.pluck(:e,:u, :rel)