2017-03-23 18 views
1

ユーザーが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 

まず、ユーザが任意のトレーニング時間を持っているかどうかをチェック:ら彼は、ユーザーがそのようなあなたの意見の訓練を予約したかどうかをチェックすることができます)、別の時間に

おかげ

答えて

0

を予約します;彼が持っている場合は、あなたはすでに彼が現在のトレーニングを予約して、のunbookボタンを表示しているかどうかをチェックしますが、そうでなければbookボタンを表示します。

希望すると便利です。

+0

私はこれをbooking_formビューに置く必要がありますか? – Cesar

+0

@Cesarはい、代わりに: '%%current_user.not_booked?(@ training)%>' – amrrbakry

+0

私はcurrent_user.trainings.any?を置くと以下のエラーが表示されます:ルートは一致しません{:action => "show"、:controller => "booking"、:id => nil、:training_id => "6"}必須キーがありません:[:id] – Cesar

関連する問題