Ruby Mailer: 参数数量错误

4

我正在构建我的邮件发送程序,但是我一直遇到以下问题:

参数数量错误(0个参数应该是1个)

可能有点疯狂,但我觉得我已经正确定义了所有内容:

控制器(为简洁起见省略部分内容):

def create
@cms484 = Cms484.new(cms484_params)

respond_to do |format|
  if @cms484.save
    SendLink.message(@cms484).deliver_later
    format.html { redirect_to cms484s_path, notice: 'Cms484 was successfully created.' }
    format.json { render :show, status: :created, location: @cms484 }
  else
    format.html { render :new }
    format.json { render json: @cms484.errors, status: :unprocessable_entity }
  end
end

SendLink.rb:

    class SendLink < ApplicationMailer
    def message(cms484)
    @cms484 = cms484
    mail(
      :subject => 'Hello from Postmark',
      :to  => @cms484.recipient ,
      :from => 'info@mysite.com',
      :html_body => '<strong>Hello</strong> user!.',
  end
end

是只有我看到了大海捞针还是我漏看了其他东西?

如果有关联的话,我正在使用Postmark进行交付,并按照说明书在我的application.rb文件中定义了这些参数。不过我认为这应该是一个更简单的问题。

编辑 完整的错误内容:

Completed 500 Internal Server Error in 76ms

ArgumentError (wrong number of arguments (0 for 1)):
  app/mailers/send_link.rb:2:in `message'
  app/mailers/send_link.rb:4:in `message'
  app/controllers/cms484s_controller.rb:38:in `block in create'
  app/controllers/cms484s_controller.rb:36:in `create'

你在 SendLink.rb 文件中的 mail 函数中,把逗号放错位置了,应该是放在右括号后面。 - Sri Harsha Kappala
发布后发现了这个问题,不确定我做了什么,但并没有解决问题。不过还是谢谢你提醒我。 - PSCampbell
我曾经遇到过同样的问题。信不信由你,重启服务器后,邮件预览开始工作了,也许在使用邮件生成器后需要重新启动。 - Hecatonchier
3个回答

6

我遇到了一个类似的问题,我把我的ActionMailer方法命名为“message”,结果它是Rails中的保留字并抛出了错误。

我认为“mail”是保留字,“email”则不是。


0

SendLink.rb 中的 mail ... 行看起来不对,将其更改为:

 mail(
  :subject => 'Hello from Postmark',
  :to  => @cms484.recipient ,
  :from => 'info@mysite.com',
  :html_body => '<strong>Hello</strong> user!.')

我没有看到我发布的内容和你的建议有任何区别?为了确保,我复制并粘贴了建议,但仍然看到相同的0对1错误。 - PSCampbell
这是一个语法问题,请检查 ,)。但我认为这并没有解决你在问题评论中提到的问题。所以继续努力。 - jon snow

0

好的,所以我决定重新编写它,结果 - 它可以工作了。除了使用电子邮件(email)和邮件(mail)方法之外,为什么或有什么不同之处,我不知道。如果你能看出来是什么,请务必指出给我!

Send_link.rb:

class SendLink < ApplicationMailer



def email(cms484)
    @cms484 = cms484
     mail(
  :subject => 'Hello from Postmark',
  :to  => @cms484.recipient ,
  :from => 'info@mysite.com',
)
  end
end

控制器:

def create
@cms484 = Cms484.new(cms484_params)

respond_to do |format|
  if @cms484.save
    SendLink.email(@cms484).deliver_later

    format.html { redirect_to cms484s_path, notice: 'Cms484 was successfully created.' }
    format.json { render :show, status: :created, location: @cms484 }
  else
    format.html { render :new }
    format.json { render json: @cms484.errors, status: :unprocessable_entity }
  end
end 

结束


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