Don't use components!

http://glu.ttono.us/articles/2006/08/30/guide-things-you-shouldnt-be-doing-in-rails

Also this really should be on the Rails list.

On 11/9/06, Kev <griffin.kev / gmail.com> wrote:
> Thanks guys,
>
> I shall look into components, and when I have more time (I'm currently
> at work!) digest Gustav's post more fully, although from my shaky
> outline you seem to understand very well what I wish to do!
>
> Gustav Paul wrote:
> > Kev wrote:
> > > Hi all,
> > >
> > Hey
> > > I am building a site, and I wish to populate the navigation dynamically
> > > from a MySQL db table, and the page content from a different table.
> > >
> > > The idea being I can have the navigation on every page
> > It sounds like this is the kind of thing you'd want in your layout, or,
> > if you're using more than one layout, the navigation should be in a
> > partial that you could then render in each of the particular layouts...
> > > , and use
> > > different controllers to select different content depending on what is
> > > needed.
> > >
> > I'm not quite sure what you mean, but 'content' usually refers to the
> > views that get rendered by the actions in your controllers...So
> > 'depending on what's needed' usually means you have seperate views for
> > your different actions.
> > > example:
> > > The Event page content comes from a page table where id = someValue
> > > but I also need some events, they come from the events table.
> > >
> > This sounds like you've a view that should look as follows...?
> >
> > <div id="page_content">
> >   <%= Page.find_by_controller_and_action("event", "list").page_content %>
> > </div>
> > <div id="event_list">
> >   <%= Event.find(:all, :order => 'created_at desc', :limit => 20).each
> > do |event| %>
> >     <!-- do something with 'event', eg. -->
> >     <div id="event_<%=event.id%>">Title: <%=event.title%> </div>
> >   <% end %>
> > </div>
> >
> > Assuming you're keeping the page content in a table called pages with
> > atleast four columns: id, controller and action (which together specify
> > which action in which controller should have the text rendered in the
> > view for) and page_content, which contains the actual page content. I'm
> > assuming since you want to display a list of events, you're rendering
> > the 'list' action in an event_controller (I'm guessing here :] ). The
> > previous post suggested getting this kind of data in your controller and
> > pass it to this view as instance variables, this is better practice.
> >
> > The second part of the code will get the last 20 events and display
> > their titles.
> > > I am confused how to put all the pieces together in one page.
> > >
> > I hope the above code helps. I'm almost 100% sure I don't understand
> > what you want fully, if you'd care to elaborate a little bit more I'd be
> > happy to help you as best I can.
> > > Could anyone point me in the right direction?
> > >
> > >
> > The right direction is undoubtedly on the Rails Mailing List :]
> > rubyonrails-talk / googlegroups.com
> >
> > The previous post suggested components,
> > Some people believe they are evil ... It's your call though :] If you're
> > using components, you most likely want to be using partials instead, but
> > that's a 100% IMHO!
> > http://glu.ttono.us/articles/2006/08/30/guide-things-you-shouldnt-be-doing-in-rails
> > The basic idea is that using a component is like calling a new action,
> > with rendered view etc, so unless you want to include an entire other
> > view that already lives elsewhere in your app, use a partial
> > instead...if of course that is the case, then using a component is perfect.
> >
> > Anyway, Cheery-O
> > Gustav Paul
> > gustav / rails.co.za
>
>
>


-- 
Giles Bowkett
http://www.gilesgoatboy.org