Blog index

Part 1: Membuat email newsletter di Rails

Dibuat pada:

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