我正在尝试在我的应用中设置一些内容,每天向所有用户发送电子邮件,每天都会为其帐户创建新闻帖。
我已经完成了CRON任务设置,但我对ActionMailer了解不清楚如何向每个用户发送特定信息......
在我的应用中,用户属于帐户,帐户有很多用户,用户有很多想法,帐户通过用户有很多想法。
因此,如果帐户1有3个用户,那么我每天都希望所有三个用户通过电子邮件在最后一天收到新的想法。
我知道这很复杂,但是如果有人可以提供一个起点,那将非常感激。
干杯
编辑以包含来自模型的代码:
class Account < ActiveRecord::Base
has_many :users
has_many :ideas, :through => :users
class User < ActiveRecord::Base
belongs_to :account
has_many :ideas, :dependent => :destroy
我基本上希望在每日电子邮件中将此索引从索引页面发送给每个用户:
<strong>Here are some of your colleagues recent ideas:</strong>
<% @ideas.each do |idea| %> #@ideas = Account.ideas
<% if idea.created_at > 4.hours.ago %>
<table class="microposts" summary="User microposts">
<tr>
<td class="micropost">
<span class="ideatitle"><%= idea.title %></span><br />
<span class="ideacontent"><%= idea.content %></span>
<span class="timestamp">
Conceived <%= time_ago_in_words(idea.created_at) %> ago.
</span>
</td>
<td>
再次感谢!
答案 0 :(得分:11)
这将是以下内容(如果没有代码,则无法获得具体内容):
daily.rake
- 您的佣金任务每天通过cron
调用
namespace :daily do
desc "run daily tasks"
task :daily, :needs => :environment do
Account.each do |account|
account.users.each do |user|
UserMailer.deliver_daily_email(user)
end
end
end
user_mailer.rb
- 您的动作邮件发送实际的电子邮件
UserMailer < ActiveMailer::Base
def daily_email(user)
@recipients = "#{user.email}"
@from = "my@email"
headers "Reply-to" => "my@email"
@subject = "Your daily message"
@sent_on = Time.now
@body[:user] = user
end
end
daily_email.text.html.erb
- 电子邮件的实际内容
<h2>Hi <%=h @user.name %></h2>
You like:
<ul>
<% @user.account.ideas.each do |idea| %>
<li><%=h idea.title %></li>
<% end %>
</ul>
-sincerely, the mailer server
希望这能让您清楚地了解如何配置它。如果有什么问题在这里让我知道。享受!
<强> [编辑] 强>
如下面的Josh Pinter所述,您可能只想向用户发送新的想法(在过去24小时内创建,或跟踪用户看到的想法并排除电子邮件中的想法)。您可以通过idea.rb
scope :recent, -> { where("created_at < ", 1.day.ago) }
或
# Note, you'll need to create and maintain a `viewed_at` column
scope :unviewed, -> { where(viewed_at: nil) }
然后,对于每个用户,您可以检查
ideas = user.ideas.recent.any?
,只有recent
或unviewed
个想法才会发送电子邮件。发送电子邮件后,您可以通过运行ideas.update_all(viewed_at: Time.now)
来设置查看。