Rails 4 邮件程序未初始化常量

Rails 4 Mailer Uninitialized Constant

我正在尝试设置一个邮件程序,当列表的可用日期是今天时,它将触发一个邮件程序。为此,我使用 Date.today。其他相关代码和错误如下。提前致谢。

availabke_date_mailer.rb

class ListingAvailableDateMailer < ActionMailer::Base
default from: "Nooklyn <help@nooklyn.com>"

  def listing_available_expire(listing, agent)
    @listing = listing
    @agent = agent
    mail to: "#{agent.email}", subject: 'Availability of your listing needs to be changed!'
  end
end

listing_available_expire_notification.html.erb:

Hiya <%= @agent.first_name %>,<br><br>

The Available Date for your listing has passed. Please make the necessary changes.<br><br>

Listing: <%= link_to @listing.short_address, @listing, target: "_blank" %><br><br>
Available Date: <%= @listing.date_available %><br><br>`

available_date.rake:

namespace :listings do
  desc "Send a message to an agent if the available date on their listing has passed"
  task listing_available_expire: :environment do
    Listing.all.each do |listing|
      if listing.date_available == Date.today   
        ListingAvailableDateMailer.listing_available_expire(listing,listing.listing_agent).deliver_now
      end
    end
  end
end

错误:

重命名您的 availabke_date_mailer.rb 并将其存储在正确的位置:

app/mailers/listing_available_date_mailer.rb

Rails 为您施展了很多魔法,但只有您遵循其惯例,魔法才会发挥作用。允许自动加载并消除手动要求所有文件的约定之一是 class 名称(驼峰式)必须与定义它们的文件名(下划线)相匹配。

在下一步中,您必须重命名您的视图。因为遵循 Rails 约定,它需要这样命名:

app/views/listing_available_date_mailer/listing_available_expire.html.erb

阅读 Rails 指南中的 Action Mailer Basics

此错误的另一个原因是如果您尝试运行类似

UserMailer.signup_confirmation(@user).deliver
NameError: uninitialized constant UserMailer

来自 rails 控制台。

请注意,完全相同的代码在控制器中工作。

测试此类代码的一种简单方法是将其简单地放置在不需要任何努力执行的控制器操作中,例如,用户显示视图是一个很好的候选者,因此只需加载该页面就会导致要发送的电子邮件