ROR Mailers- Newby to Ruby needs help

23 views
Skip to first unread message

Nicole Morales

unread,
Nov 11, 2014, 11:13:51 AM11/11/14
to rubyonra...@googlegroups.com
Hi all

Im pretty new to Ruby on Rails.  My boss created an app and is asking me to create a worker to email us when there is a conflict of events for a DJ. It works in the terminal but Im having problems getting the event details of the conflict to display in my mailer.  Im trying to test it out with mail catcher to see if Im doing it correctly but I do not know what to pass for the overlaps parameter in my test.  Below is my code. Can someone help me out?

My worker says this(PLEASE LOOK AT THE CAPS)
class TalentConflictsWorker
    include Sidekiq::Worker
    include Sidetiq::Schedulable
    sidekiq_options retry: false

    MAX_CALENDARS_TO_SCHEDULE_AT_ONCE=10

    
    def perform (user_id)
        
        user=User.find(user_id)
        events=user.calendar.events
        events.each do |e|
            #Checking for conflicting events. If not the same event and has an overlap, display name and start date.
            overlaps=events.where("(strftime('%s',start) - strftime('%s',?)) * (strftime('%s',?) - strftime('%s',end)) >= 0" , e.start, e.end ).where.not(id: e.id)
            overlapsflag=overlaps.present?
            #overlaps=where("(start,events.end) OVERLAPS (timestamp ?, timestamp ?)" AND not(id: e.id).present?
            
            if overlapsflag
                
                CalendarMailer.talent_conflict(user, events, overlaps).deliver
                
                #FOR TERMINAL <---THIS WORKS IN THE TERMINAL (when uncommented) MY ISSUE IS HOW DO I PASS THE OVERLAPS AND GET THOSE EVENTS TO DISPLAY IN THE EMAIL
                #puts "Conflict found", e.name, e.start
                #overlaps.each do |overlap_event|
                #puts overlap_event.name
                #puts overlap_event.start
                #overlapstring=overlap_event.to_s
                #end
            #else
                #puts "NO EVENT CONFLICT FOUND"
            end           
        end       
    end
end

Heres the mailer I THOUGHT PERHAPS I PUT THE DO LOOP IN THE MAILER? 

def talent_conflict(user, events, overlaps)
        @user=user
        @events=events
        @overlaps= overlaps
        overlaps.each do |overlap_event|
                puts overlap_event.name
                puts overlap_event.start
                #overlapstring=overlap_event.to_s
            end
        mail(subject: "SMG Talent: detected an event conflict )")
    end

THIS IS THE HTML 

<p>Event conflicts have been detected.</p>

<ul>

<li><%= @events.name %> held on <%= @events.start %> conflicts with the following event: <%= @overlaps.name %><%= @overlaps.start %></li>


</ul>

Colin Law

unread,
Nov 11, 2014, 11:22:14 AM11/11/14
to rubyonra...@googlegroups.com
On 11 November 2014 16:13, Nicole Morales <nmora...@gmail.com> wrote:
> Hi all
>
> Im pretty new to Ruby on Rails. My boss created an app and is asking me to
> create a worker to email us when there is a conflict of events for a DJ. It
> works in the terminal but Im having problems getting the event details of
> the conflict to display in my mailer. Im trying to test it out with mail
> catcher to see if Im doing it correctly but I do not know what to pass for
> the overlaps parameter in my test. Below is my code. Can someone help me
> out?
> ...
> Heres the mailer I THOUGHT PERHAPS I PUT THE DO LOOP IN THE MAILER?
>
> def talent_conflict(user, events, overlaps)
> @user=user
> @events=events
> @overlaps= overlaps
> overlaps.each do |overlap_event|
> puts overlap_event.name

puts outputs to the server terminal window, you presumably want to add
it to the text of the email instead.

Colin
Reply all
Reply to author
Forward
0 new messages