読者です 読者をやめる 読者になる 読者になる

ぞえの技術めも

Ruby on Rails勉強中

【141日目】【1日20分のRailsチュートリアル】【第10章】演習の2.

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

今日は「10.5 演習」の2.から。

10.5 演習

2.現在は、/usersのユーザーインデックスページを開くとすべてのユーザーが表示され、/users/:idのようにIDを指定すると個別のユーザーを表示できます。
しかし考えてみれば、有効でないユーザーは表示する意味がありません。そこで、リスト10.58のテンプレートに記入して、この動作を変更してください。
なお、ここで使用するActive Recordのwhereメソッドについては、11.3.3でもう少し詳しく説明します。応用問題: /usersと/users/:id両方の統合テストを作成してください。

whereメソッドはよく分からないけど、SQLでSELECT文使うときのWHERE句みたいなものかな。。。また後で。

穴埋めするとこんな感じかなぁ。。。

app/controllers/users_controller.rb

  def index
    @users = User.where(activated: true).paginate(page: params[:page])
  end

  def show
    @user = User.find(params[:id])
    redirect_to root_url and return unless @user.activated?
  end

応用問題: /usersと/users/:id両方の統合テストを作成してください。

なんて難しい。。。。

/usersについて統合テスト作成してみたけどこんなのでいいのだろうか。。。ファイルもこれでいいのかよく分かってない…。
とりあえずテストは通った。

まぁまずは自分で書いてみるのも勉強だよね。答え合わせはまたいつか。

test/integration/users_index_test.rb

  def setup
    @admin     = users(:michael)
    @non_admin = users(:archer)
  end
   :
  test "index as non-activated" do
    log_in_as(@admin)
    # 無効なユーザー
    @admin.toggle!(:activated)
    get users_path
    assert_template 'users/index'
    assert_select 'a', text: @admin.name, count: 0
    @admin.toggle!(:activated)
  end
$ bundle exec rake test
47 tests, 215 assertions, 0 failures, 0 errors, 0 skips

今日の学習時間は【35分】

次は「10.5 演習」の2.の/users/:idの統合テストを作成するところから。