Suppose there is a new post and as soon the post is created I want to send this post as a link in an email to all the subscribers and this is ok. But what if there is a new subscriber and I wish to send him the last sent email then how do I do this?
I am guessing as soon as the new subscription is created I should retrieve the last email and send it to him. I dont think emails are stored so I should recreate a new email with a link to last post.
class Subscription
def create
@user = User.find(params[:id])
add_user_to_mailing_list(@user)
send_last_email_to_user(@user)
end
def send_last_email_to_user(user)
last_post = Post.last #what if this was a complex query like getting the last 5 posts? Should this go inside the Post model?
email = create_an_email(post)
send_email(email)
# where should the previous two methods go inside?
end
end
Or instead of sending an email from here, there be a watcher or an observer who listens for new subscriptions so to keep this logic away from here?
Whenever there is a new post I can add a watcher which listens for any changes to the Post model and use an after_create callback to send the emails.
But should there be a new watcher listening for new subscriptions?