# Dynamic paths

**URL:** <https://www.ruby-forum.com/t/dynamic-paths/171900>\
**Category:** Rails\
**Created:** [July 11, 2009, 12:18am UTC](https://www.ruby-forum.com/t/dynamic-paths/171900 "2009-07-11T00:18:25Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 12:18am UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/1 "2009-07-11T00:18:25Z")

</div>

does anyone know how i can make dynamic paths?

say i had a partial for maybe an index list, but i want the link to  
the show page to be dynamic so im able to use the partial for may  
objects.

\<%= link\_to “show”, “#{object}” + \_path(object) %\>

something along those lines.

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 12:23am UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/2 "2009-07-11T00:23:19Z")

</div>

Bob O wrote:

> does anyone know how i can make dynamic paths?
> 
> say i had a partial for maybe an index list, but i want the link to  
> the show page to be dynamic so im able to use the partial for may  
> objects.
> 
> \<%= link\_to “show”, “#{object}” + \_path(object) %\>
> 
> something along those lines.

\<%= link\_to “show”, :controller =\> controller.controller\_name %\>

This will automatically define the path to the current controller when  
it’s called from a view within that controller…

For instance say you have an products controller with a products view…

Using the line above will give you:

\<%= link\_to “show”, products\_path %\>

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 12:35am UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/3 "2009-07-11T00:35:57Z")

</div>

excellent. thank you.

i further step.

I have a polymorphic association where im trying to achieve something  
similar.

im feeding an xml file to a swf.

the xml iterates over the poly model, but it belongs\_to many different  
objects.

but the xml file is called from the poly controller. so the above wont  
work correctly, right?

if this doesnt make sense i can post some code

On Jul 10, 4:23 pm, “Älphä Blüë” [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid)

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 12:18pm UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/4 "2009-07-11T12:18:01Z")

</div>

On Jul 10, 11:17 pm, Bob O [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> does anyone know how i can make dynamic paths?
> 
> say i had a partial for maybe an index list, but i want the link to  
> the show page to be dynamic so im able to use the partial for may  
> objects.
> 
> \<%= link\_to “show”, “#{object}” + \_path(object) %\>
> 
> something along those lines.

Are you looking for polymorphic\_path ?

Fred

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 12:47am UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/5 "2009-07-11T00:47:31Z")

</div>

Hi Bob,

It depends on how you have your controllers setup - really. For  
instance, I have a Universal controller template that 37 other  
controllers use.

class UniversalTemplatesController \< ApplicationController  
def index  
@objects =  
params[:controller].singularize.camelize.constantize.find(params[…])

```
respond_to do |format|
  format.html
  format.xml { render :xml => @objects }
end

```

end  
end

class NextController \< UniversalTemplatesController

# Inherits from the universal\_templates\_controller

# no other code in here

end

class YetAnotherController \< UniversalTemplatesController

# Inherits from the universal\_templates\_controller

# no other code in here

end

etc…

When these other controllers call what I showed you from within their  
specific views, it works fine because they are all part of the  
UniversalTemplatesController.

I’m not sure if this is what you were asking but it’s another way of  
doing things especially if you are reusing a lot of the same code within  
other controllers.

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 13, 2009, 3:41pm UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/6 "2009-07-13T15:41:32Z")

</div>

Let me see if i can be more clear, and i will try some of the  
suggested solutions

Im trying to make the route paths dynamic.

Lets say I have 2 models document, and article

I would have paths like  
document\_path(document), documents\_path, new\_document\_path etc…  
and similar for article  
article\_path(article), articles\_path, new\_article\_path etc…

In the past few apps I have been developing I have come across  
situations where I have had blocks of code (that could be a helper or  
partial) that are pretty much the same for various models. or im this  
particular case, an xml file that needs to be used by various models.

So in these cases I want to be able to create 1 partial or helper or  
even an xml.builder that could allow the passing of any model object.

Database attributes work as they should  
document.title or article.title could be passed in like so \<%=  
my\_partial(object) %\> with

Def my\_partial(object)  
object.title  
End

The problem comes with the restful paths

document\_path(document) or article\_path(article)

Where I want to generate

#{object}_path(object) or #{object)s\_path or new_#{object}\_path  
etc…

This way i can create 1 block of code to be used by many objects

Does that make more sense?

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 11, 2009, 9:10pm UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/7 "2009-07-11T21:10:16Z")

</div>

If your routes are set up in the default RESTful style, then you  
should just be able to call:

\<%= link\_to ‘show’, object %\>

…and the routing system will get what you mean. If things are more  
complicated, you may need of the other solutions here. Or, you could  
call a named route like this:

\<%= link\_to ‘show’, send("#{some expression that gives you the name}  
\_path", object) %\>

but the previous example seems much cleaner.

–Matt J.

---

<div class="post-metadata">

**Author:** ![Bob\_O](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/5e9695/32.png) [@Bob\_O](https://www.ruby-forum.com/u/Bob_O)\
**Post date:** [July 13, 2009, 6:32pm UTC](https://www.ruby-forum.com/t/dynamic-paths/171900/8 "2009-07-13T18:32:12Z")

</div>

After diving into a few mentioned scenarios (thanks Frederick) the  
polymorphic\_path and polymorphic\_url is what i was looking for.

thanks guys

B
