Railsチュートリアル 第11章
11.1 AccountActivations リソース
11.1.1
演習1
省略.
演習2
メールにはフルのURLが記載されていないとアクセスできませんからね.
11.1.2
演習1
省略.
演習2
インスタンスを生成するのは面倒ですが, before_create
が機能しているかを確かめましょう. create_activation_digest
を呼び出した際のログは一部省略しています.
>> user = User.create( >* name: "Console Test", >* email: "console@test.com", >* password: "password", >* password_confirmation: "password") >> user.create_activation_digest NoMethodError (private method `create_activation_digest' called for #<User:0x00007fbb70839d60>) >> user.activation_digest => "$2a$10$olzQ9tgFiKu/mrHwP/D5nO8XVyiz1TJ9dSVKO1.lvkc9EAdnSL6cK"
はじめbefore_create
の機能を勘違いしていました. Rubyとしてのオブジェクトを作成する前に実行されるものだと思っていました. だから上の演習もUser.new
を実行して確認しようとしていました.
しかしここでいうcreate
は, データベース操作CRUDのうちのひとつのことだったんですね. だからUser.new
ではactivation_token
が作成されませんでした.
11.2 アカウント有効化のメール送信
11.2.1
演習1
以下のようになりました.
>> CGI.escape("Don't panic!") => "Don%27t+panic%21"
11.2.2
config/environments/development.rb
を編集したあとの再起動は以下のコマンドで行いました.
$ docker-compose restart
ちなみに再起動する前にメールプレビューを見てみましたが, エラーが出ました.
演習1
Date
欄には以下の内容が表示されました.
Mon, 02 Jul 2018 04:59:25 +0000
Locale
を変更しても特に変化はありませんでしたね.
11.2.3
演習1, 2
省略.
11.2.4
演習1
Railsサーバーが起動しているコンテナの標準入出力をローカルマシンのターミナルにアタッチします.
$ docker attach <container id or name>
この状態で新規ユーザー登録をすると, メール送信のログを見ることができます.
終わったら
Ctrl+P, Ctrl+Q
を押してデタッチをしましょう. 間違ってCtrl+D
等でコンテナを抜け, コンテナが落ちてしまった場合はこちらを参考にしてください.
演習2
省略.
11.3 アカウントを有効化する
11.3.1
演習1, 2
こんな感じです.
>> user = User.create( >* name: "Activation Test", >* email: "activation@test.com", >* password: "password", >* password_confirmation: "password") >> token = user.activation_token => "Pr4fTMDEgwnsh4rTUSsQiA" >> user.authenticated?(:activation, token) => true
11.3.2
演習1, 2
省略.
11.3.3
演習1, 2
簡単なので省略.
演習3
アクティベートされていないユーザーをfixture
内に作成しました.
# test/fixtures/users.yml non_activated: name: Non Activated email: non_active@example.com password_digest: <%= User.digest('password') %>
統合テスト用の新しいクラスを作成すべきなのか, 不勉強なため判断がつきませんでした. すくなくともusers/index
ページには関連したテストなので, users_index_test.rb
に書くことにしました.
# test/integration/users_index_test.rb def setup @admin = users(:michael) @non_admin = users(:archer) @non_activated = users(:non_activated) end test "should not show non-activated user" do log_in_as(@admin) get users_path assert_select 'a[href=?]', user_path(@non_activated), count: 0 get user_path(@non_activated) assert_redirected_to root_url end
11.4 本番環境でのメール送信
この節はやっていません.