ユーザーが1時間のトレーニングを予約できるアプリケーションを作成しました。アプリケーションはすでに完了していますが、ユーザーが複数のトレーニング時間に同時に予約できるエラーがあります。ユーザーに1日1時間のトレーニング時間を予約させる
ユーザーが既に予約されている場合は、他のトレーニングでブックボタンが表示されなくなります(既に予約されているトレーニングを受けるとブックボタンが表示されます)。私はこれを行うために援助を求めたいと思います。
Userモデル::
class User < ApplicationRecord
has_many :trainings, through: :bookings
has_many :bookings
def not_booked?(training)
bookings.where(training: training).none?
end
ショーのトレーニングビュー:
<div class="row">
<section>
<h1>
HOUR: <%= @training.hour %>
</h1>
</section>
<section>
<h1>
SLOTS: <%= @training.left_slots %>
</h1>
</section>
<center>
<%= render 'bookings/booking_form' if logged_in? %>
<%= render 'bookings/index_bookings' if logged_in? %>
</center>
booking_formビュー:レコードの
<% unless current_user?(@user) %>
<% if current_user.not_booked?(@training) %>
<%= link_to "Book", new_training_booking_path(@training),
class: "btn btn-primary" %>
<% else %>
<%= link_to "Unbook",
training_booking_path(@training, @training.bookings.where(user: current_user).first),
method: :delete, data:{ confirm: 'Sure?' },
class: "btn btn-primary" %>
<% end %>
<% end %>
、予約が削除されている日常の私のコードは以下の通りであります真夜中に、私が必要とするのは、ユーザーにただ一度予約させる正しいコードです(もし彼が予約されていなければ
if current_user.trainings.any? # user booked any training hours?
if current_user.trainings.include?(@training)
# user already booked this training hour
<%= link_to "Unbook",
training_booking_path(@training, @training.bookings.where(user:
current_user).first),
method: :delete, data:{ confirm: 'Sure?' },
class: "btn btn-primary" %>
end
else
# user hasn't booked any training hours
<%= link_to "Book", new_training_booking_path(@training, @booking,
class: "btn btn-primary" %>
end
まず、ユーザが任意のトレーニング時間を持っているかどうかをチェック:ら彼は、ユーザーがそのようなあなたの意見の訓練を予約したかどうかをチェックすることができます)、別の時間に
おかげ
私はこれをbooking_formビューに置く必要がありますか? – Cesar
@Cesarはい、代わりに: '%%current_user.not_booked?(@ training)%>' – amrrbakry
私はcurrent_user.trainings.any?を置くと以下のエラーが表示されます:ルートは一致しません{:action => "show"、:controller => "booking"、:id => nil、:training_id => "6"}必須キーがありません:[:id] – Cesar