在不创建 model/controller 和使用数据库的情况下发送确认电子邮件?
Sending a confirmation email without creating a model/controller and use of a db?
我创建了一个单页登录站点,其中包含一个简单的等待列表表单,该表单将信息转储到 google 文档中(暂时尝试保持低技术含量,因为应用程序将构建在顶部这也是)。
我正在尝试向提交等待名单电子邮件地址的人发送一封确认电子邮件。我可以在不创建 model/controller 和使用数据库的情况下将电子邮件地址传递给邮寄者吗?
我之前通过创建 model/controller(见下面的代码)和使用数据库(postgreSQL / Heroku)来完成此操作,但对于这样一个简单的任务来说它看起来很麻烦。
这是我过去的设置,希望摆脱 model/controller 并将电子邮件地址(w/ .downcase 转换)直接传递给邮件程序。
models/waitlist.rb
class WaitList < ActiveRecord::Base
before_save {self.email = email.downcase}
attr_accessible :email
validates :email, :presence => true, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
end
controllers/waitlist_controller.rb
class WaitlistsController < ApplicationController
def create
@waitlist = Waitlist.new(params[:waitlist])
if @waitlist.save
# Tell the ProspectMailer to send an email to us
WaitlistMailer.waitlist_email(@waitlist).deliver
end
end
private
end
mailer/waitlist.rb
class Waitlist < ActionMailer::Base
default from: "hello@domain.com"
def waitlist_email(waitlist)
@waitlist = waitlist
mail( :to => @waitlist.email,
:subject => 'Thanks for signing up!' )
end
end
views/waitlist/waitlist_email.html.erb
Email text (possibly HTML) for the body of the email sent via the mailer
感谢您的帮助!
您的控制器应该告诉邮件程序发送电子邮件。
在您的控制器 create
操作中,为什么不直接将 email
参数传递给您的邮件程序?
app/controllers/wait_lists_controller.rb
class WaitListsController < ApplicationController
def create
send_wait_list_email(params[:wait_list][:email])
end
private
def send_wait_list_email(email)
WaitListMailer.wait_list_email(email).deliver
end
end
app/mailers/wait_list_mailer.rb
class WaitListMailer < ActionMailer::Base
def wait_list_email(email)
mail(to: email, subject: "Thanks for signing up!")
end
end
app/views/wait_lists/new.html.erb
<%= form_for(:wait_list, url: wait_lists_path) do |f| %>
<%= f.text_field :email, placeholder: "Email" %>
<%= f.submit "Join" %>
<% end %>
如果您想对电子邮件进行验证,我建议保留您的 WaitList
模型并包括 ActiveModel::Model
— 并非所有模型都必须继承自 ActiveRecord::Base
,仅当他们需要它。
app/models/wait_list.rb
class WaitList
include ActiveModel::Model
attr_reader :email
def initialize(email)
@email = email
post_initialize
end
validates(
:email,
presence: true,
format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
)
private
def post_initialize
if email
email.downcase!
end
end
end
app/controllers/wait_lists_controller.rb
class WaitListsController < ApplicationController
def new
@wait_list = WaitList.new
end
def create
@wait_list = WaitList.new(wait_list_params)
if @wait_list.valid?
send_wait_list_email(@wait_list)
# redirect somewhere
else
render :new
end
end
private
def send_wait_list_email(wait_list)
WaitListMailer.wait_list_email(wait_list).deliver
end
def wait_list_params
params.require(:wait_list).permit(:email)
end
end
app/views/wait_lists/new.html.erb
<%= form_for(@wait_list) do |f| %>
<%= f.text_field :email, placeholder: "Email" %>
<%= f.submit "Join" %>
<% end %>
希望对您有所帮助。
http://edgeguides.rubyonrails.org/action_mailer_basics.html#calling-the-mailer
我创建了一个单页登录站点,其中包含一个简单的等待列表表单,该表单将信息转储到 google 文档中(暂时尝试保持低技术含量,因为应用程序将构建在顶部这也是)。
我正在尝试向提交等待名单电子邮件地址的人发送一封确认电子邮件。我可以在不创建 model/controller 和使用数据库的情况下将电子邮件地址传递给邮寄者吗?
我之前通过创建 model/controller(见下面的代码)和使用数据库(postgreSQL / Heroku)来完成此操作,但对于这样一个简单的任务来说它看起来很麻烦。
这是我过去的设置,希望摆脱 model/controller 并将电子邮件地址(w/ .downcase 转换)直接传递给邮件程序。
models/waitlist.rb
class WaitList < ActiveRecord::Base
before_save {self.email = email.downcase}
attr_accessible :email
validates :email, :presence => true, format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
end
controllers/waitlist_controller.rb
class WaitlistsController < ApplicationController
def create
@waitlist = Waitlist.new(params[:waitlist])
if @waitlist.save
# Tell the ProspectMailer to send an email to us
WaitlistMailer.waitlist_email(@waitlist).deliver
end
end
private
end
mailer/waitlist.rb
class Waitlist < ActionMailer::Base
default from: "hello@domain.com"
def waitlist_email(waitlist)
@waitlist = waitlist
mail( :to => @waitlist.email,
:subject => 'Thanks for signing up!' )
end
end
views/waitlist/waitlist_email.html.erb
Email text (possibly HTML) for the body of the email sent via the mailer
感谢您的帮助!
您的控制器应该告诉邮件程序发送电子邮件。
在您的控制器 create
操作中,为什么不直接将 email
参数传递给您的邮件程序?
app/controllers/wait_lists_controller.rb
class WaitListsController < ApplicationController
def create
send_wait_list_email(params[:wait_list][:email])
end
private
def send_wait_list_email(email)
WaitListMailer.wait_list_email(email).deliver
end
end
app/mailers/wait_list_mailer.rb
class WaitListMailer < ActionMailer::Base
def wait_list_email(email)
mail(to: email, subject: "Thanks for signing up!")
end
end
app/views/wait_lists/new.html.erb
<%= form_for(:wait_list, url: wait_lists_path) do |f| %>
<%= f.text_field :email, placeholder: "Email" %>
<%= f.submit "Join" %>
<% end %>
如果您想对电子邮件进行验证,我建议保留您的 WaitList
模型并包括 ActiveModel::Model
— 并非所有模型都必须继承自 ActiveRecord::Base
,仅当他们需要它。
app/models/wait_list.rb
class WaitList
include ActiveModel::Model
attr_reader :email
def initialize(email)
@email = email
post_initialize
end
validates(
:email,
presence: true,
format: { with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\Z/i }
)
private
def post_initialize
if email
email.downcase!
end
end
end
app/controllers/wait_lists_controller.rb
class WaitListsController < ApplicationController
def new
@wait_list = WaitList.new
end
def create
@wait_list = WaitList.new(wait_list_params)
if @wait_list.valid?
send_wait_list_email(@wait_list)
# redirect somewhere
else
render :new
end
end
private
def send_wait_list_email(wait_list)
WaitListMailer.wait_list_email(wait_list).deliver
end
def wait_list_params
params.require(:wait_list).permit(:email)
end
end
app/views/wait_lists/new.html.erb
<%= form_for(@wait_list) do |f| %>
<%= f.text_field :email, placeholder: "Email" %>
<%= f.submit "Join" %>
<% end %>
希望对您有所帮助。
http://edgeguides.rubyonrails.org/action_mailer_basics.html#calling-the-mailer