Salut tout le monde,
Je travaille sur un projet de reservation de studios.
Lorsque je cree une nouvelle reservation, je veux d'abord verifier que le studio est libre...
Lorsque mes controles reussissent, la valeur retournee par mes methodes book_studio et check_dispo est 'nil' , donc consideree comme fausse par mon if
Comment faire pour que ces methodes renvoient 'true' en cas de succes ?
J'ai essaye d'ajouter une commande return, puts, etc.... mais ca renvoie 'nil'...
Merci d'avance,
Pat
mon code ressemble a ca :
dans mon controller reservation :
dans mon model reservation :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 def create @reservation = Reservation.new(params[:reservation]) if @reservation.book_studio if @reservation.save flash[:notice] = 'Reservation was successfully created.' redirect_to :action => 'list' else render :action => 'new' end else flash[:notice] = 'Probleme de booking.' render :action => 'new' end end
enfin, dans mon model studio :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 def book_studio self.studio_bookings = [] date = self.start_date time = self.time time_duration = self.time_duration week_duration = self.week_duration if self.studio.check_dispo(date, time, time_duration, week_duration) i = 0 while i < week_duration studio_booking = StudioBooking.new(:studio_id =>self.studio_id, :start_date => date, :time => time, :bgColorCode => '#FF4DFC', :time_duration => time_duration, :description => 'Reservation') self.studio_bookings << studio_booking i += 1 date = date + 7 end else errors.add(:start_date, "is already booked for the studio " + self.studio.name) return false end end
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 def check_dispo(date, time, time_duration, week_duration) i = 0 end_time = time + time_duration.strftime('%H').to_i*3600 + time_duration.strftime('%M').to_i*60 while i < week_duration if studio_bookings = StudioBooking.find(:all, :conditions => ["start_date = ?", date]) for studio_booking in studio_bookings studio_booking_end_time = studio_booking.time + studio_booking.time_duration.strftime('%H').to_i*3600 + studio_booking.time_duration.strftime('%M').to_i*60 unless time >= studio_booking_end_time || end_time <= studio_booking.time return false end end end i += 1 date = date + 7 end end
Partager