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.
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).
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).
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
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.
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.