# Polymorphic model path problems

**URL:** <https://www.ruby-forum.com/t/polymorphic-model-path-problems/149714>\
**Category:** Rails\
**Created:** [September 28, 2008, 10:14pm UTC](https://www.ruby-forum.com/t/polymorphic-model-path-problems/149714 "2008-09-28T22:14:04Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![JHuizingh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8797f3/32.png) [@JHuizingh](https://www.ruby-forum.com/u/JHuizingh)\
**Post date:** [September 28, 2008, 10:14pm UTC](https://www.ruby-forum.com/t/polymorphic-model-path-problems/149714/1 "2008-09-28T22:14:04Z")

</div>

I have a credentials\_controller and Credential model. The Credential  
model is an STI structure with a number of classes inheriting it. For  
example:

class CredWebsite1 \< Credential

When I try to do the index command in the credentials controller, it  
gives the error undefined method

* * *

NoMethodError in Credentials#index

Showing credentials/index.html.erb where line #17 raised:

undefined method `cred\_website1\_path’ for #\<ActionView::Base:  
0xb6f74494\>

## Extracted source (around line #17): 17: \<%= link\_to ‘Show’, credential %\>

I want all of the inherited models to use the path for  
credentials\_controller. How do I set that up?

Thanks,  
Jonathan

---

<div class="post-metadata">

**Author:** ![JHuizingh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8797f3/32.png) [@JHuizingh](https://www.ruby-forum.com/u/JHuizingh)\
**Post date:** [September 29, 2008, 8:01pm UTC](https://www.ruby-forum.com/t/polymorphic-model-path-problems/149714/2 "2008-09-29T20:01:58Z")

</div>

becomes(klass)

Returns an instance of the specified klass with the attributes of the  
current record. This is mostly useful in relation to single-table  
inheritance structures where you want a subclass to appear as the  
superclass. This can be used along with record identification in  
Action Pack to allow, say, Client \< Company to do something like  
render :partial =\> @client.becomes(Company) to render that instance  
using the companies/company partial instead of clients/client.

Note: The new instance will share a link to the same attributes as the  
original class. So any change to the attributes in either instance  
will affect the other.

In your case: link\_to ‘Show’, credential.becomes(Credential)

You may also decide to have your controller specify the class instead,  
there is probably a clean way but I don’t know it off the top of my  
head.

- Daniel  
[strd6.com](http://strd6.com)

---

<div class="post-metadata">

**Author:** ![JHuizingh](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/j/8797f3/32.png) [@JHuizingh](https://www.ruby-forum.com/u/JHuizingh)\
**Post date:** [October 6, 2008, 6:05am UTC](https://www.ruby-forum.com/t/polymorphic-model-path-problems/149714/3 "2008-10-06T06:05:18Z")

</div>

Thanks! That is exactly what I was looking for. Works like a charm.

Jonathan
