宿泊者(ゲスト)の予約確認ページを作成します。
記述追加 app\controllers\reservations_controller.rb(27行目)
def your_trips @trips = current_user.reservations.order(start_date: :asc) end
app\controllers\reservations_controller.rb
class ReservationsController < ApplicationController before_action :authenticate_user! def create room = Room.find(params[:room_id]) if current_user == room.user flash[:alert] = "オーナーが予約することはできません。" else start_date = Date.parse(reservation_params[:start_date]) end_date = Date.parse(reservation_params[:end_date]) days = (end_date - start_date).to_i + 1 @reservation = current_user.reservations.build(reservation_params) @reservation.room = room @reservation.price = room.price @reservation.total = room.price * days @reservation.save flash[:notice] = "予約が完了しました。" end redirect_to room end def your_trips @trips = current_user.reservations.order(start_date: :asc) end private def reservation_params params.require(:reservation).permit(:start_date, :end_date) end end
記述追加 config\routes.rb
「get '/your_trips' => 'reservations#your_trips'」の記述追加(7行目)
Rails.application.routes.draw do #ルートをpages#homeに設定 root 'pages#home' get 'pages/home' get '/your_trips' => 'reservations#your_trips' resources :users, only: [:show] resources :rooms, except: [:edit] do member do get 'listing' get 'pricing' get 'description' get 'photo_upload' get 'amenities' get 'location' get 'preload' get 'preview' end resources :photos, only: [:create, :destroy] resources :reservations, only: [:create] end devise_for :users, path: '', path_names: {sign_in: 'login', sign_out: 'logout', edit: 'profile', sign_up: 'registration'}, controllers: {registrations: 'registrations'} # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end
「app\views\reservations」フォルダに「your_trips.html.erb」ファイルを新規作成します。
app\views\reservations\your_trips.html.erb(新規作成したファイル)
<div class="row"> <div class="col-md-3"> <ul class="sidebar-list"> <li class="sidebar-item"><%= link_to "ご予約の内容", your_trips_path, class: "sidebar-link active" %></li> </ul> </div> <div class="col-md-9"> <div class="panel panel-default"> <div class="panel-heading"> ご予約内容 </div> <div class="panel-body"> <% @trips.each do |trip| %> <div class="row"> <div class="col-md-3", style="white-space: nowrap"> <%= I18n.l(trip.start_date, format: :full_date) %> </div> <div class="col-md-2"> <%= link_to room_path(trip.room) do %> <%= image_tag trip.room.cover_photo(:thumb) %> <% end %> </div> <div class="col-md-5"> <%= link_to trip.room.listing_name, room_path(trip.room) %><br/><br/> <span> <%= image_tag trip.room.user.gravatar_url, class: "img-circle avatar-small" %> <%= link_to user_path(trip.room.user) do %> <%= trip.room.user.fullname %> <% end %> </span> </div> <div class="col-md-3 text-right"> </div> </div> <hr/> <% end %> </div> </div> </div> </div>
ブラウザ確認
宿泊者の予約確認ページです。
http://localhost:3000/your_trips
お部屋登録者(ホスト)の予約確認ページを作成します。
記述追加 app\controllers\reservations_controller.rb(31行目)
def your_reservations @rooms = current_user.rooms end
app\controllers\reservations_controller.rb
class ReservationsController < ApplicationController before_action :authenticate_user! def create room = Room.find(params[:room_id]) if current_user == room.user flash[:alert] = "オーナーが予約することはできません。" else start_date = Date.parse(reservation_params[:start_date]) end_date = Date.parse(reservation_params[:end_date]) days = (end_date - start_date).to_i + 1 @reservation = current_user.reservations.build(reservation_params) @reservation.room = room @reservation.price = room.price @reservation.total = room.price * days @reservation.save flash[:notice] = "予約が完了しました。" end redirect_to room end # 宿泊者用予約確認 def your_trips @trips = current_user.reservations.order(start_date: :asc) end #ホスト用予約確認 def your_reservations @rooms = current_user.rooms end private def reservation_params params.require(:reservation).permit(:start_date, :end_date) end end
記述追加 config\routes.rb
8行目に「get '/your_reservations' => 'reservations#your_reservations'」の記述を追加
Rails.application.routes.draw do #ルートをpages#homeに設定 root 'pages#home' get 'pages/home' get '/your_trips' => 'reservations#your_trips' get '/your_reservations' => 'reservations#your_reservations' resources :users, only: [:show] resources :rooms, except: [:edit] do member do get 'listing' get 'pricing' get 'description' get 'photo_upload' get 'amenities' get 'location' get 'preload' get 'preview' end resources :photos, only: [:create, :destroy] resources :reservations, only: [:create] end devise_for :users, path: '', path_names: {sign_in: 'login', sign_out: 'logout', edit: 'profile', sign_up: 'registration'}, controllers: {registrations: 'registrations'} # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html end
「app\views\reservations」フォルダに「your_reservations.html.erb」ファイルを新規作成します。
app\views\reservations\your_reservations.html.erb(新規作成したファイル)
<div class="row"> <div class="col-md-3"> <ul class="sidebar-list"> <li class="sidebar-item"><%= link_to "受注予約の一覧", your_reservations_path, class: "sidebar-link active" %></li> <li class="sidebar-item"><%= link_to "登録したお部屋の管理", rooms_path, class: "sidebar-link" %></li> <li class="sidebar-item"><%= link_to "お部屋の新規登録", new_room_path, class: "sidebar-link" %></li> </ul> </div> <div class="col-md-9"> <div class="panel panel-default"> <div class="panel-heading"> 受注予約の一覧 </div> <div class="panel-body"> <% @rooms.each do |room| %> <% room.reservations.each do |reservation| %> <div class="row"> <div class="col-md-3", style="white-space: nowrap"> <%= I18n.l(reservation.start_date, format: :full_date) %> </div> <div class="col-md-2"> <%= link_to room_path(reservation.room) do %> <%= image_tag reservation.room.cover_photo(:thumb) %> <% end %> </div> <div class="col-md-5"> <%= link_to reservation.room.listing_name, room_path(reservation.room) %><br/><br/> <span> <%= link_to user_path(reservation.user) do %> <%= image_tag reservation.user.gravatar_url, class: "img-circle avatar-small" %> <%= reservation.user.fullname %> <% end %> </span> </div> <div class="col-md-3 text-right"> </div> </div> <hr/> <% end %> <% end %> </div> </div> </div> </div>
ブラウザ確認
お部屋登録者(ホスト)用の予約確認ページです。
http://localhost:3000/your_reservations
ナビゲーションバーのリンク部分を修正します。
記述追加 app\views\shared\_navbar.html.erb(31行目)
<li><%= link_to "登録したお部屋の管理", rooms_path %></li> <li><%= link_to "お部屋の新規登録", new_room_path %></li> <li><%= link_to "受注予約の管理(ホスト用)", your_reservations_path %></li> <li><%= link_to "予約履歴(ゲスト用)", your_trips_path %></li>
app\views\shared\_navbar.html.erb
<!-- ナビゲーションバー --> <nav class="navbar navbar-default navbar-static-top"> <div class="container"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">ナビゲーション トグル</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">テストサイトMinpaku</a> </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav navbar-right"> <% if (!user_signed_in?) %> <li><%= link_to "ログイン", new_user_session_path %></li> <li><%= link_to "新規ユーザ登録", new_user_registration_path %></li> <% else %> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false"> <!-- アバター画像 --> <%= image_tag current_user.gravatar_url, class: "img-circle avatar-small" %> <!-- 氏名表示に変更 --> <%= current_user.fullname %> <span class="caret"></span> </a> <ul class="dropdown-menu"> <li><%= link_to "登録したお部屋の管理", rooms_path %></li> <li><%= link_to "お部屋の新規登録", new_room_path %></li> <li><%= link_to "受注予約の管理(ホスト用)", your_reservations_path %></li> <li><%= link_to "予約履歴(ゲスト用)", your_trips_path %></li> <li role="separator" class="divider"></li> <li><%= link_to "ユーザ登録情報修正", edit_user_registration_path %></li> <li><%= link_to "ログアウト", destroy_user_session_path, method: :delete %></li> </ul> </li> <% end %> </ul> </div> </div> </nav>