I am building a site that let's users track their progress on 30 day
challenges. To record their progress, users make a Post for each day
of the challenge. The Post object has a "complete" attribute to record
if they were successful on that particular day. When users view a
challenge, I build a UI element that both let's users navigate to
daily Posts, and get a snapshot of the challenger's progress. It
looks a little like this ...
[10/11] [10/12] [10/13] ... * 30 days, with different colored boxes
There are five types of buttons, with factors such as today's date,
the presence of posts, the success of posts, etc.
1. This day has a post, and the user was successful. This button is
GREEN, and has a link to view the post.
2. This day has a post, and the user was unsuccessful. This button is
RED, and has a link to view the post
3. This day is after today, so no posting is possible. This button is
GREY, and has NO link.
4. This day is post-able, but there is no post. This button is WHITE.
5. This day is post-able, and the logged in user owns the challenge.
This button is YELLOW, and has a link to create a new post.
Tests with users have shown that this is one of their favorite parts
of the app, so it needs to stay.
I think I am approaching this incorrectly. Right now, I am building an
array of arrays in the controller ... 1 item for each of the 30 days
in the nav. Each item is an array with data for the view ...
[date,type,post id,border type]. I pass this to the view using an
instance variable @thirtydays, and then use more logic on the View end
(e.g. "if boxtype == 3") to decide how to display the button.
Something seems fishy about this to me but I am not skilled enough to
know why. What is the 'correct' way to supply data for UI elements
with lots of logic? Should I keep this all in the View? Should I
create a method under the Challenger class that takes a number (1-30),
and spits information for that particular day, and iterate from 1-30
in the View to create the buttons?
Thanks in advanced.