如果条件为真,如何将选项哈希添加到选项哈希中?

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

如果给定truefalse,那么在哈希中包含或不包含键/值对:bcc的最清洁方法是什么?

感谢任何帮助。


你的问题不够清晰。你所说的“不包括:bcc值”是什么意思?你是想让它的值为nil,还是想让:bcc键也不存在?而你所提到的“作为参数传递到send_project_link()方法中”的内容,是否只是指delivery - sawa
@sawa:好的,我尝试让它更清晰明了。 - Tintin81
3个回答

3
mail(
  {
    from:    @delivery.sender_email, 
    to:      @delivery.recipient_email, 
    subject: @delivery.subject,
  }
  .tap{|h| h[:bcc] = [@delivery.sender_email] if @delivery}
)

非常感谢。现在tap方法对我来说太高级了,不过下次会记住的。 - 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

1

我可能会这样做...

(保留html标签)
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

非常感谢。这与Sam的解决方案几乎相同。 - Tintin81

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接