Ruby on rails 在Ruby on Rails上每天向帐户用户发送带有站点更新的电子邮件

Ruby on rails 在Ruby on Rails上每天向帐户用户发送带有站点更新的电子邮件,ruby-on-rails,ruby-on-rails-3,actionmailer,Ruby On Rails,Ruby On Rails 3,Actionmailer,我正在尝试在我的应用程序中设置一些东西,每天向所有用户发送一封电子邮件,并为他们的帐户创建新闻帖子 我已经有了CRON任务设置,但我对ActionMailer了解不够,无法了解如何向每个用户发送特定信息 在我的应用程序中,用户属于帐户,帐户有很多用户,用户有很多想法,帐户通过用户有很多想法 因此,如果帐户1有3个用户,我每天都希望所有三个用户在最后一天通过电子邮件接收新想法。 我知道这很复杂,但如果有人能提供一个起点,我将不胜感激 干杯 编辑以包含模型中的代码: class Accoun

我正在尝试在我的应用程序中设置一些东西,每天向所有用户发送一封电子邮件,并为他们的帐户创建新闻帖子

我已经有了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>
以下是您的一些同事最近的想法:
#@想法
4.6小时前%>

我早就怀孕了。

再次感谢

它将是以下内容(没有代码就无法获得具体信息):

daily.rake
-通过
cron
daily调用您的rake任务

 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\u 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
希望这能让您很好地了解如何配置这一切。如果这里有什么令人困惑的地方,请告诉我。享受吧

[编辑]

正如下面Josh Pinter所指出的,您可能只想向用户发送新的想法(或者是在过去24小时内创建的,或者是跟踪用户看到的想法,并从电子邮件中排除这些想法)。您可以通过
idea.rb中的作用域来完成此操作

scope :recent, -> { where("created_at < ", 1.day.ago) }
然后,对于每个用户,您可以检查


ideas=user.ideas.recent.any?
并且仅当存在
recent
unviewed
想法时才发送电子邮件。发送电子邮件后,您可以通过运行
ideas.update\u all(查看时间:Time.now)

设置查看时间,这是一个很好的开始,谢谢。我想我只是对如何向每个用户发送帐户中的所有想法感到困惑。以上内容不是只向每个用户发送他们自己的想法吗?我对您的具体结构感到困惑
用户有很多想法,而帐户通过用户有很多想法
,这难道不意味着用户有想法,而不是帐户吗。你能发布你的activemodel记录吗?这会更明显:)谢谢大家。这次你真的救了我。这已经是很长的一段时间了,我有点撞到了墙,因为ActionMailer对我来说是全新的。可能想添加一个过滤器,只包含在过去24小时内创建的想法,或者其他什么,比如
@user.account.ideas.where(“created_at>=?”,Time.now-24.hours)。每个都做| idea
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) }