簡単な連絡先フォームを作成しようとしているので、メーラーを実装する必要があります。
コントローラーを作成しました:
class ContactusController < ApplicationController
def index
@contact_us = Contactus.new
end
def new
redirect_to(action: 'index')
end
def create
@contact_us = Contactus.new(params[:contactus])
if @contact_us.deliver
flash[:notice] = "Thank-you, We will contact you shortly."
else
flash[:error] = "Oops!!! Something went wrong. Your mail was not sent."
end
render :index
end
end
データを保存したくないので、ActiveModel を使用しました。
class Contactus
extend ActiveModel::Naming
include ActiveModel::Conversion
include ActiveModel::Validations
include ActionView::Helpers::TextHelper
attr_accessor :name, :email, :message
validate :name,
:presence => true
validates :email,
:format => { :with => /\b[A-Z0-9._%a-z\-]+@(?:[A-Z0-9a-z\-]+\.)+[A-Za-z]{2,4}\z/ }
validates :message,
:length => { :minimum => 10, :maximum => 1000 }
def initialize(attributes = {})
attributes.each do |name, value|
send("#{name}=", value)
end
end
def deliver
return false unless valid?
mail(
:to => "XXXXXXXX@gmail.com",
:from => %("#{name}" <#{email}>),
:reply_to => email,
:subject => "Website inquiry",
:body => message,
:html_body => simple_format(message)
)
true
end
def persisted?
false
end
end
すべて正常に動作します。ルーティングは良好で、検証は機能しますが、唯一のエラーは次のとおりです。undefined method mail for #<Contactus:0x007f9da67173e8>
その中で Contactus という名前とユーザー Model コードでメーラーを作成しようとしましたが、次のエラーが発生しました。private method new used
ActiveModel で ActionMailer 関数を使用するにはどうすればよいですか?