Timothy Goddard
1/24/2006 8:06:00 AM
isamura wrote:
> I am a Rails nubee but not to web app development. I've been pouring over
> the docs and tutorials for a week or two. I think have enough knowledge to
> start developing, in baby-steps.
>
> At the moment I have a functioning guest-book with the usual CRUD operations
> that Rails is so good at. It works well for the single page, /slurp/topic.
>
> The problem is reuse. What is the natural Rails way to reuse the guest-book
> functionality in other controller pages, for example /book/review.
>
> Does one copy and paste code and templates (and create new table)? I hope
> not as this doesn't sound like a proper approach.
>
> Please say it ain't so and convince me not to go back... ;)
>
> TIA,
>
> .k
The models you produce are accessible from all controllers. If you
create an "Entry" model then you can use it from any controller or
directly from a view.
For the views, rails uses a system of 'partials' for repeated content.
If you want to have a common layout for guestbook entries you could
create a file called '_entry.rhtml' (note the leading underscore).
Within the same controller you can call "render :partial => 'entry'" to
render this partial once. To access it from another controller use
"render :partial => 'entries/entry'" (where 'entries' is the directory
under ./views/ that the partial is found in.)
Note that partials don't have access to the local variables of the
original view. You need to pass these in under the option 'locals'.
e.g. "render :partial => 'entry', :locals => {:entry => @entry}" will
give the partial a local variable 'entry' containing the contents of
@entry.
If you want to iterate over an array of entries, rendering the partial
for each one, use "render :partial => 'entry', :collection =>
@entries". The partial will have the local variable with the same name
as itself ('entry') set to the current entry to render.
I hope this is a decent introduction and isn't too confusing. I started
using rails about a month and a half ago and am absolutely loving it.
The book "Agile Development with Rails" provides a very good
introduction all the way from the very basics to advanced use of Rails'
powerful environment. I highly recommend it.