【问题标题】:Actionmailer passing more than one argumentActionmailer 传递多个参数
【发布时间】:2009-09-05 19:39:52
【问题描述】:

我正试图找出我在使用 ActionMailer 时做错了什么。我需要能够将多个参数传递给邮件程序,但继续收到错误“参数数量错误(1 比 2)”。

我的代码是:士兵控制器

def create
  @soldier = Soldier.new(params[:soldier])
  @battalion = Battalion.find(params[:battalion_id])
  @company = Company.find(params[:company_id])
  @frg = @company.users.find_by_position('FRG Leader')
respond_to do |format|
  if @soldier.save
    flash[:notice] = 'Soldier was successfully created.'
    format.html { redirect_to battalion_company_soldier_path(@battalion, @company, @soldier)}
    format.xml  { render :xml => @soldier, :status => :created, :location => @soldier }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @soldier.errors, :status => :unprocessable_entity }
    end
  end
end

soldier_mailer.rb:

class SoldierMailer < ActionMailer::Base

def welcome_email(soldier, primary)  
  recipients soldier.primary.email
  from "laurenrothlisberger@gmail.com"  
  subject "Welcome to the Unit"  
  sent_on Time.now 
  body 
end

soldier_observer.rb:

 def after_create(soldier, primary)  
   SoldierMailer.deliver_welcome_email(soldier, primary)  
 end 

基本上,我需要将同一封电子邮件发送给几个不同的收件人,这些收件人的电子邮件地址都在与士兵模型相关联的模型中。当方法中只有一个参数时,我可以毫无问题地发送电子邮件。如果我添加多个,则会引发该错误。

我将不胜感激任何帮助或指导。

谢谢。

【问题讨论】:

  • 能否贴出异常的全文和堆栈跟踪的几行?

标签: ruby-on-rails parameters actionmailer


【解决方案1】:

after_create 方法只能将模型作为参数。 如果primary是一个士兵领域,你应该做类似的事情

def after_create(soldier)
  SoldierMailer.deliver_welcome_email(soldier, soldier.primary) 
end

【讨论】:

    【解决方案2】:

    试试这个:

    class SoldierMailer < ActionMailer::Base
    
      def welcome_email(soldier)  
        recipients soldier.email_addresses
        from "laurenrothlisberger@gmail.com"  
        subject "Welcome to the Unit"  
        sent_on Time.now 
      end
    end
    

    在您的 Soldier 模型中使用此功能:我假设存在一个包含您要使用的更多电子邮件地址的关联。

    class Soldier
    
      has_many :users
    
      def email_address
        # Results in ['primary@abc.com', 'user1@abc.com', 'user2@abc'.com]
        ([primary] + users.collect { |u| u.email }).flatten
      end
    end
    

    关键是 ActionMailer 中的“收件人”可以接收一组电子邮件地址。希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      也许我不完全理解您的困境,但是发送与您的 deliver_welcome_email 方法不同的东西有什么问题吗?

      也许您可以向包含多个收件人的方法发送一个数组或哈希。从阅读 rails 文档看来,这些 action mailer 方法似乎只需要一个参数。

      此外,我对为什么需要将这两个参数都发送到邮件程序感到有些困惑。看起来您只使用了soldier

      【讨论】:

        猜你喜欢
        • 2014-10-27
        • 1970-01-01
        • 1970-01-01
        • 2014-06-02
        • 2012-08-13
        • 2016-02-03
        • 2018-10-12
        • 2021-09-12
        • 2014-06-04
        相关资源
        最近更新 更多