# Belongs\_to (polymorphic) or has\_many (through)

**URL:** <https://www.ruby-forum.com/t/belongs-to-polymorphic-or-has-many-through/197019>\
**Category:** Rails\
**Created:** [January 19, 2010, 7:00pm UTC](https://www.ruby-forum.com/t/belongs-to-polymorphic-or-has-many-through/197019 "2010-01-19T19:00:54Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![nilskassube](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/db5fbb/32.png) [@nilskassube](https://www.ruby-forum.com/u/nilskassube)\
**Post date:** [January 19, 2010, 7:00pm UTC](https://www.ruby-forum.com/t/belongs-to-polymorphic-or-has-many-through/197019/1 "2010-01-19T19:00:54Z")

</div>

Hi,

I’d be sooo happy I any of you could help me out with a problem I’m  
currently stuck with 🙂

### Basic info

I’m on Rails 2.3.5 and love using the formtastic formbuilder 🙂

### What I’m working on

I’m currently trying to build a little  
demo app where my friends and I are able to manage all the things we  
borrowed each other. (I know there are apps like this on the internet,  
I just wanted to built my own to get used to rails :-)).

So wanted to build a form where I can enter:

- the name of the thing I’m borrowing to someone
- who I’m borrowing the thing to

–\> I set up the Models  
User  
name … (default hobo user model)

Loan  
name:string  
reminder:date

### PROBLEM

Now I wanted to set up 2 relations between the model…

- Who is giving away the loan
- Who borrows the loan

???–\> What do you think would be the most clever way to set up these  
relations for my “use case”???

### Idea 1

Loan  
belongs\_to :lender, :polymorphic =\> true  
belongs\_to :borrower, :polymorphic =\> true

User  
has\_many :loans, :as =\> :lender  
has\_many :loans, :as =\> :borrower

–\> Does this work anyway??? (User.loans would be ambiguous,  
right?)  
–\> how could I create a form to create a new Loan and select the  
borrower from a select (the app would assign me as the lender in the  
controller or by hidden field I guess)

### Idea 2

Loan  
has\_many :loan\_assignments, :dependent =\> :destroy  
has\_many :users, :through =\> :loan\_assignments, :accessible =\>  
true

User  
has\_many :loan\_assignments, :dependent =\> :destroy  
has\_many :loans, :through =\> :loan\_assignments

–\> How do I restrict the form, so I can only select 1 borrower  
in /loans/new ???

* * *

P.S. Sorry for my English, it’s not my native tongue 🙂

---

<div class="post-metadata">

**Author:** ![nilskassube](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/n/db5fbb/32.png) [@nilskassube](https://www.ruby-forum.com/u/nilskassube)\
**Post date:** [January 19, 2010, 7:22pm UTC](https://www.ruby-forum.com/t/belongs-to-polymorphic-or-has-many-through/197019/2 "2010-01-19T19:22:34Z")

</div>

On Tue, Jan 19, 2010 at 12:38 PM, tiekuhn [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> demo app where my friends and I are able to manage all the things we
> 
> relations for my “use case”???  
> → Does this work anyway??? (User.loans would be ambiguous,
> 
> User  
> Â Â has\_many :loan\_assignments, :dependent =\> :destroy  
> Â Â has\_many :loans, :through =\> :loan\_assignments
> 
> → How do I restrict the form, so I can only select 1 borrower  
> in /loans/new ???

### Idea 3

Loan  
belongs\_to :lender, :class\_name =\> “User”  
belongs\_to :borrower, :class\_name =\> “User”

User  
has\_many :lendings, :class\_name =\> “Loan”, :foreign\_key =\>  
:lender\_id  
has\_many :borrowings, :class\_name =\> “Loan”, :foreign\_key =\>  
:borrower\_id

–  
Rick DeNatale

Blog: [http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)  
Twitter: [http://twitter.com/RickDeNatale](http://twitter.com/RickDeNatale)  
WWR: [http://www.workingwithrails.com/person/9021-rick-denatale](http://www.workingwithrails.com/person/9021-rick-denatale)  
LinkedIn: [Rick DeNatale - Developer - IBM | LinkedIn](http://www.linkedin.com/in/rickdenatale)
