问题:试图开发一个cron作业或推迟发送自动回复电子邮件的作业。我发现这是一个棘手的问题。这里是我的模型:Rails一个父母,两个孩子,通过父母访问其他孩子的属性
class List < ActiveRecord::Base
has_many :subscriptions
has_many :contacts, :through => :subscriptions
has_many :messages
class Subscription < ActiveRecord::Base
belongs_to :contact
belongs_to :list
class Message < ActiveRecord::Base
belongs_to :user
belongs_to :list
-----------Lists------------
| |
| |
Subscriptions (join) Messages
|
|
Contacts
我的目标是要遍历所有订阅,并为每个订阅检查,如果看到“日以来的订阅”,“注册后的日子”的消息对象属性相匹配。如果为true,则将消息传递给收件人,然后继续循环播放其他消息。
class SubscriptionsController < ApplicationController
def deliver
@subscriptions = Subscription.all
@subscriptions.each do |subscription|
subscription.list.messages.each do |message|
if message.days_since == subscription.days_after
# deliver message through mailer in a scheduled delayed_job
else
end
end
end
end
如果有人订阅列表3天前,与名录所有者想在注册后2天交付的消息,则该消息应该被传递,因为这是一个比赛。
上面的递送方法是我试图遍历所有订阅,并将subscription.days_since与message.days_after_signiup进行比较。
任何意见或想法将非常感激。真的一直在苦苦挣扎,通过这个路障会感觉很好。
D.
我将尝试在订阅和消息之间添加交付连接表。似乎有一个单独的第一类对象对此有意义。交付模型和连接表应该有助于实现遍历所有订阅的简单嵌套循环,并且对于每个订阅,抓取具有匹配的“天”属性的任何消息,然后安排电子邮件发送。感谢您解决CreativeReason问题的一些亮点,非常感谢。 – DanHodgins