学生向けプログラミング入門 | 無料

学生向けにプログラミングを無料で解説。Java、C++、Ruby、PHP、データベース、Ruby on Rails, Python, Django

【民泊5.1】【MacOSX】予約確認

宿泊者(ゲスト)の予約確認ページを作成します。


記述追加 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" %>&nbsp;
                        <%= 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" %>&nbsp;
              <!-- 氏名表示に変更 -->
              <%= 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>



ドロップダウンメニュー更新
ドロップダウンメニュー更新

YAE C5 CLINIC(札幌美容クリニック)

関連記事(外部サイト)