【148日目】【1日20分のRailsチュートリアル】【第11章】ユーザーが破棄された場合、マイクロポストも破棄されるようにする
今日は「11.1.4 マイクロポストを改良する」の「Dependent: destroy」から。
11.1.4 マイクロポストを改良する
Dependent: destroy
サイト管理者はユーザーを破棄する権限を持ちます。ユーザーが破棄された場合、ユーザーのマイクロポストも同様に破棄されるべきです。
マイクロポストとユーザーの関連性を切るのもありだと思ったけど、残しておいても容量圧迫するもんねぇ。。。要らないか。
この振る舞いは、has_manyメソッドにオプションを渡してあげることで実装できます (リスト11.18)。
元々書いてたhas_manyメソッドにdependent: :destroyオプションを追加。
これだけでユーザーを削除したらそのユーザーに紐付いたマイクロポストも削除されるらしい…!楽!シンプル!
app/models/user.rb
class User < ActiveRecord::Base has_many :microposts, dependent: :destroy :
次に、リスト11.18が正しく動くかどうか、テストを使ってUserモデルを検証してみます。
マイクロポストを生成して、次にユーザーを削除してマイクロポストの数が1減っているかを確認するテスト。
test/models/user_test.rb
test "associated microposts should be destroyed" do @user.save @user.microposts.create!(content: "Lorem ipsum") assert_difference 'Micropost.count', -1 do @user.destroy end end
問題なく動きました。
$ bundle exec rake test 54 tests, 223 assertions, 0 failures, 0 errors, 0 skips
11.2 マイクロポストを表示する
Twitterのような独立したマイクロポストのindexページは作らずに、図11.4のモックアップに示したように、ユーザーのshowページで直接マイクロポストを表示させることにします。
まずは特定のユーザーのマイクロポストを表示させるようにユーザーのプロフィールページを修正する。
今日の学習時間は【15分】。
次は「11.2.1 マイクロポストの描画」から。