2011-08-13 1 views
4

매일 매일 자신의 계정 용으로 작성된 뉴스 게시물을 가진 모든 사용자에게 일일 전자 메일을 보내는 응용 프로그램에서 뭔가를 설정하려고합니다.계정 사용자에게 사이트 업데이트가 포함 된 일일 전자 메일 보내기 Ruby on Rails

내 응용 프로그램에서

, 사용자 계정, 계정이 속한 ...

나는 이미 CRON 작업 설정을 가지고,하지만 난 각 사용자에게 특정 정보를 보내는 방법을 알아낼 ActionMailer에 대해 충분히 모른다 많은 사용자와 사용자는 많은 아이디어를 가지고 있으며 사용자가 많은 아이디어를 가지고 있습니다.

계정 1에 3 명의 사용자가있는 경우 매일 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> 

다시 한번 감사드립니다!

답변

11

(코드없이 특정 얻을 수 없다) 다음과 같이 뭔가를 할 것 :

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_mailer.rbcron를 통해 호출 이메일

UserMailer < ActiveMailer::Base 
    def daily_email(user) 
    @recipients = "#{user.email}" 
    @from  = "[email protected]" 
    headers   "Reply-to" => "[email protected]" 
    @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 

이렇게하면 어떻게 구성해야하는지 잘 알고 싶습니다. 여기서 혼란스러운 것이 있으면 알려주세요. 즐겨!

[편집] 아래 조쉬 핀터에 의해 언급 한 바와 같이, 당신은 아마 단지 (중 지난 24 시간에서 만든 사용자 새로운 아이디어를 보내거나 사용자가 볼 수있다있는 아이디어를 추적 할 수 있습니다

및 이메일에서 제외). 당신은 각 사용자에 대해, 당신은

ideas = user.ideas.recent.any?을 확인하고이 recent를하거나 경우에만 전자 메일을 보낼 수 있습니다 그리고 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) } 

의 범위하여이 작업을 수행 할 수 있습니다 unviewed 아이디어. 전자 메일을 보낸 후 ideas.update_all(viewed_at: Time.now)을 실행하여 보도록 설정할 수 있습니다.

+0

정말 감사드립니다.나는 각 사용자에게 계정의 모든 아이디어를 어떻게 보낼 수 있는지 혼란스러워합니다. 위는 각 사용자에게 자신의 아이디어 만 보냅니 까? –

+0

귀하의 특정 구조에 대해 혼란 스럽습니다. '사용자는 많은 아이디어와 계정을 가지고있어 많은 아이디어를 가지고 있습니다.'라는 말은 사용자가 계정이 아니라 아이디어를 가지고 있음을 의미하지는 않습니다. 당신은 당신의 액티브 모델 레코드를 올릴 수 있습니까? 이것은 더 명백 할 것입니다 :) – ghayes

+0

'user.account.ideas'가 작동 할 것입니다. – rubish

관련 문제