Ruby Mailer: неверное количество аргументов

Я работаю над созданием своей почтовой программы, но продолжаю сталкиваться с:

неверное количество аргументов (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'

3 ответа

Решение

Хорошо, поэтому я решил переписать это и вот - это работает. Почему или чем отличается от предыдущей версии (кроме метода email против почты, конечно, это не может быть?), Я понятия не имею. Если вы видите, что это, пожалуйста, укажите мне!

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 

конец

У меня была похожая проблема, когда я назвал свой метод ActionMailer "message", оказалось, что это было зарезервированное слово в Rails и выдал ошибку.

Я предположил бы, что "почта" была зарезервированным словом, где "электронная почта" не была.

mail ... линия в SendLink.rb выглядит неправильно, измените его на,

 mail(
  :subject => 'Hello from Postmark',
  :to  => @cms484.recipient ,
  :from => 'info@mysite.com',
  :html_body => '<strong>Hello</strong> user!.')
Другие вопросы по тегам