1

ActionMailerで何が間違っているのかを理解しようとしています。メーラーに複数の引数を渡すことができる必要がありますが、「引数の数が間違っています(1対2)」というエラーが引き続き表示されます。

私のコードは:soldier_controller

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 

基本的に、この同じメールを、すべてソルジャーモデルに関連付けられたモデルのメールアドレスを持つ複数の異なる受信者に送信する必要があります。メソッドにパラメータが1つしかない場合でも、メールを送信するのに問題はありません。複数追加すると、そのエラーがスローされます。

助けや指導をいただければ幸いです。

ありがとう。

4

3 に答える 3

2

after_createメソッドは、パラメーターとしてモデルのみを受け取ることができます。プライマリーが兵士のフィールドである場合は、次のようなことを行う必要があります

def after_create(soldier)
  SoldierMailer.deliver_welcome_email(soldier, soldier.primary) 
end
于 2009-09-05T22:53:41.853 に答える
0

deliver_welcome_emailあなたの苦境を完全には理解していないかもしれませんが、あなたの方法に何か違うものを送るだけで何か問題がありますか?

複数の受信者がいるメソッドに配列またはハッシュを送信できるかもしれません。Railsのドキュメントを読むと、これらのアクションメーラーメソッドは1つの引数しかとらないようです。

また、これらのパラメータの両方をメーラーに送信する必要がある理由についても少し混乱しています。使用しただけのようですsoldier

于 2009-09-05T22:30:30.333 に答える
0

これを試して:

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

ソルジャーモデルでこれを使用する場合:使用するメールアドレスがさらに含まれている関連付けがあると想定しています。

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の「受信者」が一連の電子メールアドレスを取得できることです。お役に立てれば。

于 2009-09-07T17:58:57.673 に答える