0
0

More than 3 years have passed since last update.

Railsチュートリアルメモ - 第11章

Last updated at Posted at 2020-03-14

メモの目次記事はこちら

公式Railsチュートリアル第11章へのリンク

サマリ

  • メールの送信とアカウント有効化機能の実装
  • メタプログラミング
  • SendGridを利用した本番環境でのメール送信

ポイント

  • rails generate mailerでメーラーの雛形を作成できる
    • e.g. rails generate mailer UserMailer account_activation password_reset
    • 生成されるHTML/textメーラーのレイアウトはapp/views/layoutsで定義されている
  • コントローラー同様、メーラーの中で作成したインスタンス変数はテンプレートの中で使用することができる
  • 送信先やメールタイトルなどはmailメソッドで指定する
    • e.g. mail to:hoge@sample.com
  • deliver_nowメソッドを呼び出すことでメールを送信する
    • e.g. UserMailer.account_activation(@user).deliver_now
  • 名前付きroot
    • 名前付きrootの第一引数は:idになりBase64でエンコードされてURLが生成される
    • 第二引数としてハッシュを渡すとURLパラメーターにしてURLを生成してくれる。その際にエスケープも行ってくれる。
    • 名前付きrootの引数として指定されたものはコントローラー内でparams[:引数]でデコードされた状態で取り出すことができる
  • 以下を行うとメールのプレビューが有効になる
    • config/environments/development.rbに以下を追記する
    • test/mailers/previews/user_mailer_preview.rbを修正する
    • プレビューURLはhttps://localhost:3000/rails/mailers/user_mailer/
  config.action_mailer.raise_delivery_errors = true
  config.action_mailer.delivery_method = :test
  host = 'localhost:3000'
  config.action_mailer.default_url_options = { host: host, protocol: 'https' }
  • assert_matchで正規表現を利用してassertできる

  • sendメソッドは引数を評価してから実行するので、メタプログラミング(プログラムによるコードの生成)を行う際に利用される
    e.g.

 attribute = "foobar"
 user.send("#{attribute}_digest")
 # => user.foobar_digestが実行される
  • テストの中でのみassignsメソッドを使うと対応するアクション内のインスタンス変数にアクセスできるようになる

    • e.g. user = assigns(:user) => @userにアクセス可能になる
  • heroku addons:create sendgrid:starterでherokuにsendgridを導入できる

感想、詰まった箇所など

  • config/environments/development.rbを書き換えた後にサーバーの再起動を行わなかったせいでMissing host to link to! Please provide the :host parameter,...というエラーが出てしまい少し詰まった。
  • herokuにSendGridを追加した後、画面からユーザー登録を行うとメールが飛ばずにWe're sorry, but something went wrong.というエラー画面が表示された。ログを確認したところNet::SMTPAuthenticationError (535 Authentication failed: account disabledとなっていた。
  • 原因分からず解消しなかったため、herokuの画面からSendGridを「Delete Add-on」した後、再度SendGrid追加しようとしたところError Provisioning User - User status - bannedと表示されてしまった。
  • herokuアプリ自体を再作成してからsendgridを再追加することで解消した。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0