Отправка электронного письма с подтверждением без создания модели/контроллера и использования базы данных?

Я создал одностраничный посадочный сайт, который содержит простую форму списка ожидания, которая сбрасывает информацию в документ Google (сейчас я пытаюсь сделать его низкотехнологичным, так как приложение также будет построено поверх этого).

Я пытаюсь отправить людям, которые отправляют свой адрес электронной почты для списка ожидания, электронное письмо с подтверждением. Могу ли я передать адрес электронной почты почтовой программе без создания модели/контроллера и использования базы данных?

Я делал это раньше, создавая модель/контроллер (см. код ниже) и используя базу данных (postgreSQL/Heroku), но для такой простой задачи это кажется грязным.

Вот моя настройка в прошлом: я хочу избавиться от модели/контроллера и передать адрес электронной почты (с преобразованием .downcase) напрямую почтовой программе.

модели/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

контроллеры/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

почтовая программа/waitlist.rb

class Waitlist < ActionMailer::Base
 default from: "[email protected]"

 def waitlist_email(waitlist)
  @waitlist = waitlist
  mail( :to => @waitlist.email,
:subject => 'Thanks for signing up!' )
 end
end

просмотры/список ожидания/список ожидания_email.html.erb

Email text (possibly HTML) for the body of the email sent via the mailer

Спасибо за помощь!


person Andrew Stroup    schedule 06.02.2015    source источник


Ответы (1)


Ваш контроллер должен указать Mailer отправить электронное письмо.

В вашем действии контроллера create, почему бы просто не передать параметр email вашей почтовой программе?

приложение/контроллеры/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, только когда это необходимо.

приложение/модели/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

приложение/контроллеры/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

http://api.rubyonrails.org/classes/ActiveModel/Model.html

person Jordan Allan    schedule 06.02.2015