На терминале:
$ rails new foobar
$ rm public/index.html
$ git init
$ git commit -m "Initial commit"
$ rails g scaffold subscription email:string
Откройте ваш редактор:
# app/models/subscription.rb
class Subscription < ActiveRecord::Base
validates :email, :presence => true # optionally validate format of email
end
# app/controllers/subscriptions_controller.rb
class SubscriptionsController < ApplicationController
def new
@subscription = Subscription.new
end
def create
@subscription = Subscription.new params[:subscription]
if @subscription.save
# queue a task to send a confirmation email (see below)
Resque.enqueue(SendConfirmationEmail, @subscription.email)
redirect_to root_path, :notice => 'Thanks for signing up.'
else
render :new
end
end
end
Вы можете удалить все другие методы / действия из вашего SubscriptionController и очистить routes.rb
, ограничив действия, доступные на ресурсе subscriptions
, с помощью resources :subscriptions, :only => [:new, :create]
.
Это действительно не касается того, как отправить электронное письмо. Есть много способов сделать это, и лучшая практика состоит в том, чтобы не посылать это в потоке запросов / ответов для производительности / отзывчивости. У меня есть строка в очереди на задание Resque, чтобы сделать это, но вы можете легко добавить DelayedJob или другой инструмент отложенного / асинхронного процесса вместо этого.