ぞえの技術めも

Ruby on Rails勉強中

【148日目】【1日20分のRailsチュートリアル】【第11章】ユーザーが破棄された場合、マイクロポストも破棄されるようにする

Ruby on Railsチュートリアル(第3版)

今日は「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 マイクロポストの描画」から。