目的
teapotというランチ募集サービスを作ってその際多かったメールでの通知機能をつける。ただ登録時はtwitterログインのみにしたいのと募集した側が応募が来た際にのみ使いたいので募集投稿時にメールアドレスを後で入れる形にする。
仕様
メールフォーム
ユーザーの情報にemailを更新する形で登録する。
@current_user = User.find_by(id: session[:user_id])
@current_user.update(email: params[:email])
現在のログインユーザーの情報を@current_userに入れ、そのユーザー情報にupdateでemail情報を入れる。
<%= form_tag("/post/notification_email") do %>
<div class="form-group">
<label class="post_form_label bmd-label-floating">email</label>
<textarea name="email" class="form-control" ></textarea>
</div>
<input type="submit" value="投稿" class="btn btn-raised btn-info post_form_submit">
<% end %>
メール送信機能
このやり方でactivejobを使ってメール送信。
メールのバリデーション
validates :email, format: { with: /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i }
メールアドレスの型はstring。メールアドレス全体の長さの最大値は254文字なので256文字以上じゃないのでtextではなくstring。
独自ドメインのメールアドレスの準備
ムームードメインでムームーメールを使ってgmailで管理という方法を取りました。gsuiteだと月600円でムームーメールだと複数メールアドレス作成できて年600円なんで複数サービス作る人にはおすすめ。
ここがやり方詳しかった。