I need to build an array that contains lots of date objects. I''ve got a booking model and it contains stuff like this... create_table "bookings", :force => true do |t| t.string "firstname" t.string "lastname" t.integer "number_of_people" t.integer "deposit" t.integer "price" t.integer "days" t.datetime "from" t.datetime "to" t.datetime "created_at" t.datetime "updated_at" end SOO - each booking starts on a date and finishes on a date... I need to collect up all the booking dates in an array so that I can do stuff with them... I figure i need a method in my model to do it... something like def self.all_booking_dates find(:all); # first off find all the booking records @BookedDays = ( XXX ).map # do something here to create an array with all the dates in, maybe I need a loop ... sorry bit stuck? end be grateful for any tips. thanks... -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
bingo bob wrote:> I need to collect up all the booking dates in an array so that I can do > stuff with them... > > I figure i need a method in my model to do it... > > something like > > def self.all_booking_dates > > find(:all); # first off find all the booking records > > @BookedDays = ( XXX ).map # do something here to create an array > with all the dates in, maybe I need a loop ... sorry bit stuck? > > endTo get an array of dates for just one booking, you can build a range and then convert it to an array: (from..to).to_a To get the array of dates for a set of bookings (such as all bookings), I think something like this is what you''re looking for: bookings.map { |b| (b.from..b.to).to_a }.flatten.uniq.sort -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks, I''ll try that. I got to here myself, but it''s not right ! I think it''s close though and I find this syntax easier to read. def availability @bookings = Booking.find(:all) for booking in @bookings do bookingfirstday = booking.from.to_date bookinglastday = booking.to.to_date @BookedDays = (bookingfirstday..bookinglastday).map end end Can you explain why it''s wrong ? The result is that I @BookedDays only gets set to the last evaluated booking (I think). I will try your way though, thanks. (I''d like to get my way working also if poss)? Is the loop rewriting @BookedDays each time around rather than adding to it? ta -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
bingo bob wrote:> > Thanks, I''ll try that. > > I got to here myself, but it''s not right ! I think it''s close though and > I find this syntax easier to read. > > def availability > > @bookings = Booking.find(:all) > > for booking in @bookings do > bookingfirstday = booking.from.to_date > bookinglastday = booking.to.to_date > @BookedDays = (bookingfirstday..bookinglastday).map > end > > end > > Can you explain why it''s wrong ? > > The result is that I @BookedDays only gets set to the last evaluated > booking (I think). > > I will try your way though, thanks. (I''d like to get my way working also > if poss)? > > Is the loop rewriting @BookedDays each time around rather than adding to > it? > > taThere are a couple problems. The first is that, yes, @BookedDays is being rewritten, not appended to. You need to initialize the array before the loop starts (@BookedDays = []) and use the += method to append to it. Also, you should renamed that variable to @booked_days. You can do this with a for-loop, but I suggest getting used to the closured-oriented methods in Enumerable and Array. Your code will be much more concise and expressive. -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
Thanks that''s very clear and helpful, I''ll try and use the more concise method. It''s working for me and I understand why my version wasn''t. Maybe my brain is squished but I''ve done the hard thing and now this next more simple loop is causing me problems in my view. I wish to show 12 calendars from the current month to 12 months on. So I know how to display one....<working> <%= calendar(:year => 2009, :month => 1) do |d| if @BookedDays.include?(d) [d.mday, {:class => "specialDay"}] else [d.mday, {:class => "normalDay"}] end end %> How do I display twelve of em...I know this is uber easy but I can''t get it to work. I firgure something like what follows is useful but I cant get the loop within the loop working in the view. <% start = Time.now.month finish = Time.now.month + 12 %> -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
bingo bob wrote:> How do I display twelve of em...I know this is uber easy but I can''t get > it to work. > > I firgure something like what follows is useful but I cant get the loop > within the loop working in the view. > > <% > start = Time.now.month > finish = Time.now.month + 12 > %>Yeah, that''s not going to work. The easiest way is probably something like this: <% d = Date.today %> <% 12.times do %> <%= calendar(:year => d.year, :month => d.month) do |d| if @BookedDays.include?(d) [d.mday, {:class => "specialDay"}] else [d.mday, {:class => "normalDay"}] end end %> <% d >>= 1 # advance 1 month %> <% end %> -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---
On Sat, Dec 27, 2008 at 4:44 PM, Jeremy Weiskotten <rails-mailing-list-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> > bingo bob wrote: > >> How do I display twelve of em...I know this is uber easy but I can''t get >> it to work. >> >> I firgure something like what follows is useful but I cant get the loop >> within the loop working in the view. >> >> <% >> start = Time.now.month >> finish = Time.now.month + 12 >> %> > > Yeah, that''s not going to work. The easiest way is probably something > like this: > > <% d = Date.today %> > <% 12.times do %> > > <%= calendar(:year => d.year, :month => d.month) do |d| > if @BookedDays.include?(d) > [d.mday, {:class => "specialDay"}] > else > [d.mday, {:class => "normalDay"}] > end > end > %> > > <% d >>= 1 # advance 1 month %> > <% end %>Small critique here on your code style. @BookedDays doesn''t really follow Ruby on Rails conventions. Camel-case should only be used by class/module definitions and references. @booked_days is the convention that Rails encourages. This might be something that you''ve decided based on a personal or team preference, but in case you''re not attached to it, following Rails conventions will make your life and anybody else that later works on a project.. a little easier. :-) Cheers, Robby -- Robby Russell Chief Evangelist, Partner PLANET ARGON, LLC design // development // hosting w/Ruby on Rails http://www.planetargon.com/ http://www.robbyonrails.com/ aim: planetargon +1 503 445 2457 +1 877 55 ARGON [toll free] +1 815 642 4068 [fax] --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---