a different page displays on the weekend--how?

I'm developing an app that I want to have switch from its normal
weekday view to a weekend-only view (essentially a look at the
previous week).

While I understand the concept of what I need to do:

if the day = saturday or sunday display Y

I have no good foothold for the actual code (still learning this
stuff).

Any help would be huge!

Dan

If it is just the data that is the issue (as opposed to different
layouts/views), then filtering the results of the controller.index
method is the way to go.

in your controller:

if (1..5).include?(Date.today.wday)
   # set the appropriate variables
   # @daystuff = Stuff.today
   render 'weekday'
else
   # @weekstuff = Stuff.last_week
   render 'weekend'
end

You might be able to use the same view depending on how similar the display of the daily stuff and the weekly (weekend) stuff is.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com
+1 513-295-4739
Skype: rob.biedenharn

Excellent. This gets me moving in the right direction. Thanks so much!

I was able to take that code and flip it to this, just as a quick way
to make sure I got it:

<% if (1..5).include?(Date.today.wday)
  flash[:notice] = 'weekday!'
  else
    flash[:notice] = 'weekend!'
    end %>

And that totally worked. So I definitely know where to take this. But--
and I will say again, I'm new at this--WHY did it work?

Specifically, what's the (1..5) thing? I've not seen that before.

Thanks again!

Dan

I was able to take that code and flip it to this, just as a quick way
to make sure I got it:

<% if (1..5).include?(Date.today.wday)
  flash[:notice] = 'weekday!'
  else
    flash[:notice] = 'weekend!'
    end %>

And that totally worked. So I definitely know where to take this. But--
and I will say again, I'm new at this--WHY did it work?

Specifically, what's the (1..5) thing? I've not seen that before.

Thanks again!

Dan

Date#wday gives the "weekday" number: 0=Sunday, 6=Saturday
1..5 is an inclusive Range
(1..5).include?(x) is a predicate that is true if x falls in the Range, it's like (1 <= x && 5 <= x)

I see that you put the code into your view. You probably want to keep this kind of logic in your controller (or possibly a helper).

In any case, in a view you could put:

<%= (1..5).include?(Date.today.wday) ? "weekday" : "weekend" %>

<% %> bracket Ruby code
<%= %> do too, but the value of the contained expression as a string is output to the page.

-Rob

Thanks, that totally makes sense. I just tossed it in the view to make
sure it worked. Moved it into the index controller and the final looks
like this:

if (1..5).include?(Date.today.wday)
    else
      redirect_to :controller => 'libraries', :action => 'index'
    end

Thank you again!!!

Have you considered the time zone issue if this is for a public
website? Does Date.today know the timezone of the user? If not and
it works in the local timezone of the server (or maybe the rails
timezone setting, or UTC) then if a user is in a different timezone
his weekend may be up to 23 hours adrift from that (depending on the
server/rails timezone setting).

Colin

You could use

Time.zone = current_user.timezone # which would probably be in a before_filter

and then

Time.zone.now

instead of Date.today

Thanks, that totally makes sense. I just tossed it in the view to make
sure it worked. Moved it into the index controller and the final looks
like this:

if (1..5).include?(Date.today.wday)
else
redirect_to :controller => 'libraries', :action => 'index'
end

Have you considered the time zone issue if this is for a public
website? Does Date.today know the timezone of the user? If not and
it works in the local timezone of the server (or maybe the rails
timezone setting, or UTC) then if a user is in a different timezone
his weekend may be up to 23 hours adrift from that (depending on the
server/rails timezone setting).

You could use

Time.zone = current_user.timezone # which would probably be in a before_filter

How does current_user.timezone work?
Colin

Well there's a little handwaving here. The assumption is that
current_user refers to a user model instance set up by
restful_authentication or some other login code, and that the model
contains the user's preferred timezone probably set by a profile ui.

Here - http://blog.redfin.com/devblog/2007/08/getting_the_time_zone_from_a_web_browser.html
- is a way (allegedly) of getting the user's timezone using
javascript, which could then be passed to the server. I cannot vouch
for whether it works or not.

Colin

Another weekend-related question:

I have a variable that displays something scheduled for tomorrow.
Since I'm skipping weekends, on Friday I want it to show what's
scheduled on Monday.

I know how to get the query right, but I'm not sure about the if
statement:

Essentially, I need to say if Date.today = friday.... but I can't seem
to get the syntax right. The rest would simply be:

mystery if statement here
      @tomorrow = Story.find(:first, :conditions => ['rundate =?',
Date.today+3])
    else
      @tomorrow = Story.find(:first, :conditions => ['rundate =?',
Date.today+1])
    end

Thanks!!

Another weekend-related question:

I have a variable that displays something scheduled for tomorrow.
Since I'm skipping weekends, on Friday I want it to show what's
scheduled on Monday.

I know how to get the query right, but I'm not sure about the if
statement:

Essentially, I need to say if Date.today = friday.... but I can't seem
to get the syntax right. The rest would simply be:

mystery if statement here
@tomorrow = Story.find(:first, :conditions => ['rundate =?',
Date.today+3])
else
@tomorrow = Story.find(:first, :conditions => ['rundate =?',
Date.today+1])
end

Quoting from Rob Biedenharn's earlier post:

Date#wday gives the "weekday" number: 0=Sunday, 6=Saturday

So the test for friday is
if Date.today.wday == 5

Don't forget to allow for Saturday in your code though. As it stands
it will set @tomorrow to Sunday if today is Saturday. I would advise
against calling it @tomorrow if it is not tomorrow, it will confuse
someone sometime. Something like @next_working_day might be better.

Colin