Fakerを使って複数のサンプルユーザーを作成してみる


※ユーザーモデルが作成されていて、name email passwordカラムが作成されている前提で書いていきます
(基本的に開発環境でサンプルユーザーを作成する際に行われる処理)

まずはgemファイルを作成

```gemfile
gem 'faker', '1.7.3'
```
※バージョンは各々調べて環境にあったものを使ってください。

```ターミナル
bundle install
bundle update 実行
```

これでfakerを使う準備は整ったので、サンプルユーザーを作成するRailsタスクを作っていく

DB上にサンプルユーザーを生成するRailsタスク

```db/seeds.rb

User.create!(name: "Example User",
            email: "example@railstutorial.org",
            password: "foobar",
            password_confirmation: "foobar")


99.times do |n|
  name = Faker::Name.name
  email = "example-#{n+1}@railstutorial.org"
  password = "password"
  User.create!(name:  name,
              email:  email,
              password:               password,
              password_confirmation:  password
        )
end

```

上記コードで、Example Userとその他99のユーザーを作ってねー。言うてます。

DBリセット

```ターミナル
rails db:migrate:reset
rails db:seed
各コマンド実行
```

ちなみにrails server立ち上げっぱなしで実行するとうまくいかないのでcontrol + cでサーバーは切っておいてください。

```error_message
XXXXX$ rails db:seed
rails aborted!
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken
/Users/tky/environment/sample_app02/db/seeds.rb:15:in `<top (required)>'
/Users/tky/environment/sample_app02/bin/rails:9:in `require'
/Users/tky/environment/sample_app02/bin/rails:9:in `<top (required)>'
/Users/tky/environment/sample_app02/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
```

こんな感じに怒られるので。


これだけでサンプルユーザー作成可能。


あとはviewsでこんな感じで好きな様に表示すればちゃんと作成されているのが確認できる。

```views/users/XXX.html.erb
<ul class="users">
<% @users.each do |users| %>
<li>
<%= link_to users.name %>
</li>
end
</ul>

```

##ページネーション

100人を一気に表示すると動作遅延の影響したりするので、表示する人数を絞る

```gemfile
gem 'will_paginate', '3.1.6'
gem 'bootstrap-will_paginate', '1.0.0'
```

```ターミナル
bundle install
bundle update
```

viewファイルにwill_paginateメソッドを追加

```views/users/XXX.html.erb
<%= will_paginate %>

<ul class="users">
	<% @users.each do |users| %>
		<li>
			<%= link_to users.name %>
		</li>
	<% end %>
</ul>

<%= will_paginate %>

```

will_paginate :  これを使うことでusersビューのコードの中から@usersオブジェクトを自動的に見つけ出し、それから他のページにアクセスするためのページネーションリンクを作成しています。（動作させるには@usersにpaginateメソッドを使った結果を追加してあげる必要がある）

```railsコンソール
コンソールで確認

irb(main):002:0> User.paginate(page: 1) ←実行してみる
 
 【結果】
  User Load (1.7ms)  SELECT  "users".* FROM "users" LIMIT ? OFFSET ?  [["LIMIT", 11], ["OFFSET", 0]]
   (0.2ms)  SELECT COUNT(*) FROM "users"
=> #<ActiveRecord::Relation [#<User id: 1, name: "Example User", email: "example@railstutorial.org", created_at: "2018-05-11 10:24:16", updated_at: "2018-05-11 10:24:16", password_digest: "$2a$10$RXE2CBbPephjVs3bamy.feB68DE/1zEquj97KkqG3J5...", remember_digest: nil>, #<User id: 2, name: "Mr. Betty Cruickshank", email: "example-1@railstutorial.org", created_at: "2018-05-
.
.
.
.
.

こんな感じにpaginateでは、:pageにデータが保存されている

```

コンソールでpaginateメソッドが動作することを確認できたので、実際に使ってみる

```controllers/users_controller.rb
def index
	# @users = User.all
	@users = User.paginate(page: params[:page])	
end
```

User.all → User.paginate(page: paginate[:page])

ここでもrailsサーバーを再起動しておかないとno method errorになるので注意

2・3分くらいmethodあるわボケええ！！って状況に陥ったので…
![スクリーンショット 2018-05-11 20.25.13.png](https://qiita-image-store.s3.amazonaws.com/0/174952/203d6447-1f92-00a4-afeb-7702b611478f.png "スクリーンショット 2018-05-11 20.25.13.png")
ページをめくれるようになっていればOK！