Doh, I didn't think of linking pools to terms in the Term model.

that was what I was missing. Your other points are correct but in the
example I gave, there is only one current term (so the :order date_from
isn't needed)  but for previous and future terms,the :order => date_from is
needed.

Thanks for your help

-ants

2009/10/30 Rob Biedenharn <[email protected]>

> On Oct 29, 2009, at 6:07 PM, Anthony Gardner wrote:
>
> Simplified, I have the following relationships ....
>
> term has many swimming_classes and a swimming_class belongs to a term
> swimming_pool has many swimming_classes and a swimming_class belongs to a
> swimming_pool
>
> terms (date_from)------  swimming_classes (start_date) ------
> swimming_pools (name)
>
>
> We all speak Rails here, so just to clarify:
>
> class Term
>   has_many :swimming_classes
>   has_many :swimming_pools, :through => :swimming_classes, :order => 'name'
> end
>
> class SwimmingClass
>   belongs_to :term
>   belongs_to :swimming_pool
> end
>
> class SwimmingPool
>   has_many :swimming_classes, :order => 'start_date DESC'
> end
>
> You probably noticed the association from Term to SwimmingPool that I
> tossed in there--be patient.
>
>
> I want to order my output as ....
>
> Term (date_from DESC)
>     Swimming Pool (name ASC)
>         Swimming Class (start_date DESC)
>         Swimming Class (start_date DESC)
>         Swimming Class (start_date DESC)
>     Swimming Pool (name ASC)
>         Swimming Class (start_date DESC)
>         Swimming Class (start_date DESC)
>         Swimming Class (start_date DESC)
>
> etc.
>
>
> OK, so the view has
>
> <ul>
>   <% @terms.each do |term| -%>
>     <li>Term: <%= term.date_from %>
>       <ul>
>         <% term.swimming_pools.each do |swimming_pool| -%>
>           <li>Pool: <%= swimming_pool.name %>
>             <ul>
>               <% swimming_pool.swimming_classes.each do |swimming_class|
> -%>
>                 <li>Class starts: <%= swimming_class.start_date %></li>
>               <% end -%>
>             </ul>
>           </li>
>         <% end -%>
>       </ul>
>     </li>
>   <% end -%>
> </ul>
>
>
>
> In my controller, I'm currently just getting terms (@current_term =
> Term.find_current_term)
> and then pass that off to the view but this leaves me a lot of work to do
> to get the output I need. It seems I have to jump about a bit and it's not
> nice..
>
> If someone can just point me to the right place where I can read up on
> displaying data where data doesn't run as nice as Invoice -> Order ->
> LineItem
>
> CIA
>
> -ants
> --
>
>
> In your controller, you seem to say that you're getting a single term, but
> you said "date_from DESC".  Since it doesn't make much sense to specify a
> sort order if there is only one, I'll assume that you might get more than
> one (perhaps with a date range).
>
>   @terms = Term.commencing_between_now_and(params[:date])
>
> and then in the model:
>
> class Term
>   def self.commencing_between_now_and(future_date)
>     find(:all, :include => { :swimming_pools => :swimming_classes },
>          :conditions => ['date_from BETWEEN ? AND ?', Date.today,
> future_date])
>   end
> end
>
> Of course, you could add your own :order option to the find, but I think
> that it will work as-is.
>
> I suspect that the view is quite a bit simpler than what you have now
> (since you said it was a "lot of work").  Generally, if you can put the data
> you want into a form that is inherently ordered (like an Array or an
> ActiveRecord::Association proxy), then your output becomes simpler.  Even if
> you have to crunch the data a bit in the model (or the controller) first and
> a Hash is more natural, you can always loop in your view on:
>
>   <% my_data.keys.sort do |key| -%>
>     <%= my_data[key] %>
>   <% end -%>
>
> or turn your hash into an association list (i.e., an array of pairs [key,
> value]) and pre-sort it before the view does its thing.
>
> -Rob
>
> Rob Biedenharn http://agileconsultingllc.com
> [email protected]
>
>
>
>
> >
>


-- 
100% naturally selected. 0% designed.

--~--~---------~--~----~------------~-------~--~----~
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 [email protected]
To unsubscribe from this group, send email to 
[email protected]
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to