13
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rails 予約機能をつける。(一回目) has_manyの関係

Last updated at Posted at 2017-04-23
環境
rails 5.0
ログイン機能 devise

 ###  予約機能を作る前の状態
・userモデルで作って、ログイン機能を作っている
・bookモデルがあって各ユーザーの読んだ本を記録している。
・フォロー機能をつけている。
  個人同士の貸し借りのために、予約機能をつけたい。

userテーブル
image

bookテーブル
image

##まず予約モデルを作る。
 

$rails g model Reservation user:references book:references start_date:datetime end_date:datetime
reservation.rb
  belongs_to :user
  belongs_to :book
この二つは、自動生成している。
user.rb
 has_many :reservations, dependent: :destroy
book.rb
has_many :reservations

##予約モデルの説明
userモデルとbookモデルの関連は、以下の図である。screenshot.png

##routesを作る

routes
 resources :books do
    resources :reservations
  end 

ルートは、ちょっと特殊な書き方をする。
 

 POST   /books/:book_id/reservations(.:format)          reservations#create

##controllerを作る

reservations_controller
  def create
     @reservation = current_user.reservations.create(reservation_params)
     redirect_to root_path notice:"予約が完了しました"
   end

private

 def reservation_params
    params.require(:reservation).permit(:start_date, :end_date, :book_id)
  end 

##viewを作る(仮)

app/views/books/show.html.erb
<%= form_for [@book, @book.reservations.new] do |f| %>

<%= f.hidden_field :book_id, value: @book.id %>
<div class="col-md-6">
                                        <label>借りたい日</label>
                                          <%= f.text_field  :start_date,  :class => 'datepicker' %>
                                    </div>

                                    <div class="col-md-6">
                                        <label>返す日</label>
                                        <%= f.text_field :end_date, :class => 'datepicker' %>
                                    </div>
                               </div>

                                <%= f.submit "この日程で予約する", class: "btn btn-danger btn-wide" %>    


<% end %>

###show.html.erbの説明
・一行目の[@book, @book.reservations.new]の説明
  routesを見ると、 /books/:book_id/reservations(.:format)をしているから上になる。

しかし上のviewは、不完成である。DateTimePickerを導入してきれいにしていく。

screenshot.png

DateTimePickerを導入は、次回する
http://qiita.com/kitaokeita/items/0730373d4f7b2018e36a

 

13
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?