# Help remove duplication in my app

**URL:** <https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200>\
**Category:** Rails\
**Created:** [December 27, 2005, 11:07pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200 "2005-12-27T23:07:16Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:07pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/1 "2005-12-27T23:07:16Z")

</div>

I’m porting an old site of mine into Rails and I’m running into some  
duplication that could / needs to be weeded out. For each of my  
actions, I have to wrap the view content in the following HTML:

 ![](https://www.ruby-forum.com/images/content-top2.png)

```
 # content inserted here

```

 ![](https://www.ruby-forum.com/images/content-bottom2.png)

Unfortunately, I can’t add this snippet into the controller’s layout,  
as each posts (think blog), needs to be wrapped in this html.

The existing, non-Rails implementation can be found at http://  
[www.hsgamedev.org](http://www.hsgamedev.org) and should be a good visual aide.

Any suggestions?

~ ryan ~

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:13pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/2 "2005-12-27T23:13:18Z")

</div>

On Tue, 2005-12-27 at 17:04 -0500, J. Ryan S. wrote:

> ~ ryan ~

Ryan,

You want partials. create a file  
called /app/views/controller/action/\_box.rhtml

It will look like this:

 ![](https://www.ruby-forum.com/images/content-top2.png)
 \<%= content %\> 
 ![](https://www.ruby-forum.com/images/content-bottom2.png)

You can now render it like this in your other views:

\<%= render :partial =\> ‘box’, :locals =\> { :content =\> @foo } %\>

If you’re wanting to reuse this partial for many things, I believe you  
can nest it, so replace @foo with another render :partial call, with  
partials named \_blog.rhtml, \_comment.rhtml, or whatever.

- Jamie

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:16pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/3 "2005-12-27T23:16:32Z")

</div>

Why wouldn’t adding the code below to the controller layout work?  
For example, assuming a controller named “blog”, you could have the  
following in app\>views\>layouts\>blog.rhtml:

 ![](https://www.ruby-forum.com/images/content-top2.png)

```
 <%= @content_for_layout %>

```

 ![](https://www.ruby-forum.com/images/content-bottom2.png)

The “\<%= @content\_for\_layout %\>” would include whatever content each  
view produced.

Sorry if I misunderstood you.

Thanks.  
Steven

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:19pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/4 "2005-12-27T23:19:34Z")

</div>

Jamie,

I wasn’t aware of the ability to nest render(:partial =\> …) calls.  
I’ll re-read the docs on the render method.

~ ryan ~

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:37pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/5 "2005-12-27T23:37:39Z")

</div>

Jamie,

\<%= render(:partial =\> ‘box’, :locals =\> { :content =\> render  
(:partial =\> ‘post’) }) %\> # works

\<%= render(:partial =\> ‘box’, :locals =\> { :content =\> “\<%= link\_to  
‘Back’, :action =\> ‘list’ %\>” } ) %\> # doesn’t work

I’d like to try to avoid creating a partial template file for small,  
one-liners like the string in the second example. Any thoughts?

~ ryan ~

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:25pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/6 "2005-12-27T23:25:36Z")

</div>

Steven,

Don’t be sorry. 🙂

I’m fairly certain this wouldn’t work because I need to, potentially,  
wrap multiple blog-like posts per action. Take a look at the source  
code for the site I posted in my first message to _see_ what I mean.

~ ryan ~

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 27, 2005, 11:40pm UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/7 "2005-12-27T23:40:41Z")

</div>

Nevermind, I’m an idiot.

\<%= render(:partial =\> ‘box’, :locals =\> { :content =\> link\_to  
(‘Back’, :action =\> ‘list’) } ) %\>

~ ryan ~

---

<div class="post-metadata">

**Author:** ![sorenson](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/s/f08c70/32.png) [@sorenson](https://www.ruby-forum.com/u/sorenson)\
**Post date:** [December 28, 2005, 5:59am UTC](https://www.ruby-forum.com/t/help-remove-duplication-in-my-app/51200/8 "2005-12-28T05:59:35Z")

</div>

On 12/27/05, J. Ryan S. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> > > as each posts (think blog), needs to be wrapped in this html.
> > 
> > You want partials. create a file
> > 
> > * * *
> > 
> > Rails mailing list  
> > removed\_email\_address@domain.invalid  
> > [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)
> 
> * * *
> 
> Rails mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

Not sure if the overall idea is the most elegant way to go, but

\<%= render(:partial =\> ‘box’, :locals =\> { :content =\> “\<%= link\_to  
‘Back’, :action =\> ‘list’ %\>” } ) %\> # doesn’t work

\<%= render(:partial =\> ‘box’, :locals =\> { :content =\> “#{link\_to  
‘Back’, :action =\> ‘list’}” } ) %\> # should work

–  
Kyle M.  
Chief Technologist  
E Factor Media // FN Interactive  
removed\_email\_address@domain.invalid  
1-866-263-3261
