2015-02-06 1 views
0

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

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

Я делал это раньше, создавая модель/контроллер (см. Ниже код) и используя db (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 

просмотров/лист ожидания/waitlist_email.html.erb

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

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

ответ

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 

приложение/отправители/wait_list_mailer.rb

class WaitListMailer < ActionMailer::Base 
    def wait_list_email(email) 
    mail(to: email, subject: "Thanks for signing up!") 
    end 
end 

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

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