環境
rails 5.0
ログイン機能 devise
### 予約機能を作る前の状態
・userモデルで作って、ログイン機能を作っている
・bookモデルがあって各ユーザーの読んだ本を記録している。
・フォロー機能をつけている。
個人同士の貸し借りのために、予約機能をつけたい。
##まず予約モデルを作る。
$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モデルの関連は、以下の図である。
##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を導入してきれいにしていく。
DateTimePickerを導入は、次回する
http://qiita.com/kitaokeita/items/0730373d4f7b2018e36a