問題:試圖開發一個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