2014-01-08 26 views
4

在我的Rails項目我有這樣的郵件類:如何僅在條件爲真時才添加到選項哈希值?

class ProjectMailer < ActionMailer::Base 

    def send_project_link(delivery) 
    @delivery = delivery 
    mail(:from  => @delivery.sender_email, 
     :to  => @delivery.recipient_email, 
     :bcc  => [@delivery.sender_email], 
     :subject => @delivery.subject) 
    end 

end 

什麼是最乾淨的方式包含或不包含鍵/值對:bcc哈希,這取決於是否truefalse給出?

感謝您的任何幫助。

+0

你的問題還不清楚。不包括':bcc'值是什麼意思?你是否想要一個'nil'的值,或者你想讓':bcc'這個鍵也不存在?並且,通過「作爲參數傳遞給send_project_link()方法」,您是否僅僅指「交付」? – sawa

+0

@sawa:好的,我試圖讓它更清楚。 – Tintin81

回答

2

不包括在選項:bcc鍵,你可以這樣做:

class ProjectMailer < ActionMailer::Base 
    def send_project_link(delivery, send_with_bcc=false) 
    @delivery = delivery 
    mail_options = { 
     :from  => @delivery.sender_email, 
     :to  => @delivery.recipient_email, 
     :subject => @delivery.subject 
    } 
    mail_options[:bcc] = [@delivery.sender_email] if send_with_bcc 
    mail(mail_options) 
    end 
end 
3
mail(
    { 
    from: @delivery.sender_email, 
    to:  @delivery.recipient_email, 
    subject: @delivery.subject, 
    } 
    .tap{|h| h[:bcc] = [@delivery.sender_email] if @delivery} 
) 
+0

非常感謝。現在,「tap」方法對我來說太過先進了。儘管如此,下次還是要記住它。 – Tintin81

1

我可能會做到這一點...

def send_project_link(delivery. bcc? = false) 
    @delivery = delivery 
    mail_options = {:from  => @delivery.sender_email, 
        :to  => @delivery.recipient_email, 
        :subject => @delivery.subject 
       } 
    mail_options[:bcc] = [@delivery.sender_email] if bcc? 
    mail mail_options 
end 
+0

非常感謝。這與Sam的解決方案几乎相同。 – Tintin81