予約機能続き３　借りた人側と貸した人側のviewを作る。 親子routeのview　

### やりたいこと

前回までに予約機能を作った。ここで、貸した人側と貸した側の　viewを作る。

###環境

```ruby:環境
 rails 5.0.2
```

### routesを作る

親子routesを作ると以下になる。
　

```ruby:routes.rb

 resources :books do
    resources :reservations
  end

```
　rake routesをすると下になる。

 
```ruby:
   book_reservations GET    /books/:book_id/reservations(.:format)          reservations#index
                         POST   /books/:book_id/reservations(.:format)          reservations#create
    new_book_reservation GET    /books/:book_id/reservations/new(.:format)      reservations#new
   edit_book_reservation GET    /books/:book_id/reservations/:id/edit(.:format) reservations#edit
        book_reservation GET    /books/:book_id/reservations/:id(.:format)      reservations#show
                         PATCH  /books/:book_id/reservations/:id(.:format)      reservations#update
                         PUT    /books/:book_id/reservations/:id(.:format)      reservations#update
                         DELETE /books/:book_id/reservations/:id(.:format)      reservations#destroy
                   books GET    /books(.:format)                                books#index
                         POST   /books(.:format)                                books#create
                new_book GET    /books/new(.:format)                            books#new
               edit_book GET    /books/:id/edit(.:format)                       books#edit
                    book GET    /books/:id(.:format)                            books#show
                         PATCH  /books/:id(.:format)                            books#update
                         PUT    /books/:id(.:format)                            books#update
                         DELETE /books/:id(.:format)                            books#destroy
```

##借りた人側と貸した人側のviewを作る思考

自分の仮説

```ruby:
　　book_reservations GET    /books/:book_id/reservations(.:format)          reservations#index

```
http://localhost:3000/reservationsとなると、　routesが存在しないと言うエラーが出た。。。
　これは作るしかないと思ってindexを作った。

###routesの記述追加

 ```ruby:routes.rb
   resources :books do
    resources :reservations
  end

   get '/reservations' => 'reservations#index' 
   get '/lend' => 'reservations#lend'
```

下の２個を追加した。
　get '/reservations' => 'reservations#index'が予約する人側のview
 get '/lend' => 'reservations#lend' が貸し出す人のviewとなる。

##コントローラーの追加

```ruby:reservations.controller.rb
  def index
       @reservations = current_user.reservations.all
   end

   def lend
     @books = current_user.books
   end 
```
SQliteで見るとこうなる

![screenshot.png](https://qiita-image-store.s3.amazonaws.com/0/167576/7fdff4e8-2e29-c106-fbc8-73bda2c287bc.png)



####def indexの説明

これは予約する側のコントローラーです。どうやって予約した人を取り出すか言うと、user_idから引っ張っていています。だからcurrent_userを入れています。

####def lendの説明

これは貸す人側のコントローラーです。　book_idを使って貸す人を特定します。

bookのtableは以下になる

![screenshot 2.png](https://qiita-image-store.s3.amazonaws.com/0/167576/e567821e-ada4-b152-3da6-8cfa4a7f05ad.png)

　book_idからbookデーブルを使って、貸す側のuser_idを知ることができる。user_idは、コントローラーに現在のユーザーだけの情報を取り出すために、current_userを使う

だからこうなる
 　　 @books = current_user.books

###viewを作る。

```ruby:app/views/reservations/index.html.erb

<table>
 <% @reservations.each do |reservation| %>


 <%= reservation.book.user.username%>
 <%= reservation.book.title%>
 <%= reservation.start_date.strftime('%Y年%m月%d日') %>
 <%= reservation.end_date.strftime('%Y年%m月%d日') %>

 

 <% end %>
 </table>


```

strtimeの説明こちら
http://qiita.com/kitaokeita/items/73eb087583ac3cd4217b

ここシンプルな感じだ。

次が、貸す側のviewだ。


```ruby:app/views/reservations/lend.html.erb
 <% @books.each do |book| %>
 <% book.reservations.each do |reservation| %>

<%= reservation.user.username %>

<%= reservation.start_date.strftime('%Y年%m月%d日') %>
<%= reservation.end_date.strftime('%Y年%m月%d日') %>


<% end %>

<% end %>

```

これで完成

###感想
　個人的には難しかった。　まだまだ予約機能はできない。たとえば、日付が被ったら、エラーがでるとか


####参考資料

https://railsguides.jp/routing.html