Part 1: Membuat email newsletter di Rails
Mungkin bagi yang bertanya kenapa tidak menggunakan Mailchimp atau sejenisnya adalah karena alasan harga. Meski Mailchimp gratis di awal, tetapi untuk kedepannya akan sangat mahal.
Berikut adalah tabel harga berdasarkan jumlah subscriber per tanggal 10 Maret 2024:
Subs | Essentials | Standard | Premium |
---|---|---|---|
500 subscribers |
$13 | $20 | $350 |
1500 subscribers |
$26.5 | $45 | $350 |
2500 subscribers |
$45 | $60 | $350 |
5000 subscribers |
$75 | $100 | $350 |
10000 subscribers |
$110 | $135 | $350 |
Value dari service seperti Mailchimp saya kira selain dari tim support adalah dari kesiapan infrastructure serta tooling pendukung seperti tracker atau A/B testing.
Akan tetapi untuk saat ini kebutuhan saya adalah email newsletter sederhana.
Untuk memenuhi kebutuhan itu, sembari tanpa khawatir akan jebol limit subscribers, saya kira satu tabel dan service Amazon SNS sudah cukup. Beruntung-nya, saya sendiri yang menjadi developernya.
Membuat UI Opt-in
Di Rails pertama yang saya lakukan adalah generate controller.
rails g controller subscribers
Pertama, saya akan coba bikin opt-in sederhana yang menerima input html. Di sini belum ada interaksi ke database. Setelah submit hanya akan return 200
terlepas dari input yang valid atau tidak.
<!-- app/views/subscribers/new.html.erb -->
<form action="/subscribers" method="POST">
<label for="email">Email</label><br>
<input type="email" id="email" name="email" value="[email protected]"><br>
<input type="submit" value="Subscribe">
</form>
# config/routes.rb
resources :subscribers, only: [:new, :create]
# app/controllers/subscribers_controller.rb
class SubscribersController < ApplicationController
def new
end
def create
head :ok
end
end
Visit halaman /subscribers/new
; akan muncul form email input yang baru kita buat. Jika tombol submit di-tekan, tidak akan ada feedback apa-apa. Tetapi jika lihat status, ketika submit ditekan dia akan melakukan POST method ke /subscribes
.
Pattern penamaan method controller new
dan create
sudah umum di Rails [baca]. Selanjutnya, saya kira daripada tidak ada feedback. Ketika submit ditekan kita akan coba redirect ke halaman home
.
# app/controllers/subscribers_controller.rb
class SubscribersController < ApplicationController
def new
end
def create
redirect_to root_path, notice: "Anda berhasil subscribe!"
end
end