# Newbie question : select distinct in model

**URL:** <https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185>\
**Category:** Rails\
**Created:** [April 19, 2006, 1:12pm UTC](https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185 "2006-04-19T13:12:49Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![zimro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/dbc845/32.png) [@zimro](https://www.ruby-forum.com/u/zimro)\
**Post date:** [April 19, 2006, 1:12pm UTC](https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185/1 "2006-04-19T13:12:49Z")

</div>

Hi guys,

I’m new so be gentle 🙂

How do I put the following into a method inside a model…

select distinct(pairing\_id), description from pairings\_stories,  
pairings where pairing\_id = pairings.id order by description

I basically want to have a @pairlist = Pairing.UniqueBookList line in  
a controller.

Just not sure how to wire up this method in the model. And do I use  
find\_by\_sql or is there a nice rails/ruby technique rather than using  
the sql I typed above.

Thanks for your time and help,

Rob

---

<div class="post-metadata">

**Author:** ![zimro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/dbc845/32.png) [@zimro](https://www.ruby-forum.com/u/zimro)\
**Post date:** [April 19, 2006, 3:07pm UTC](https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185/2 "2006-04-19T15:07:45Z")

</div>

On Wednesday 19 April 2006 13:12, Robert Z. wrote:

> the sql I typed above.  
> You can’t give the “find” method a distinct option (which is logical,  
> because  
> find on a model never results in duplicate hits), so you’ll have to use  
> “find\_by\_sql”. If you could have used find, you could give an argument  
> like  
> “:order =\> ‘description’”. See [1] for details.

When making the method you want, be sure to make it as a class method,  
by  
saying:

def Pairing.UniqueBookList  
find\_by\_sql(stuff)  
end

BTW, in this particular case, I think you’ll be better off if you create  
a join  
between the “pairings” and “pairings\_stories” tables with the ON clause  
being  
“pairings.id = pairings\_stories.pairing\_id”.

References:  
[1] [Peak Obsession](http://api.rubyonrails.com/classes/ActiveRecord/Base.html#M000860)

---

<div class="post-metadata">

**Author:** ![zimro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/dbc845/32.png) [@zimro](https://www.ruby-forum.com/u/zimro)\
**Post date:** [April 19, 2006, 3:26pm UTC](https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185/3 "2006-04-19T15:26:35Z")

</div>

On 19/04/2006, at 11:06 PM, Wiebe C. wrote:

> TW, in this particular case, I think you’ll be better off if you  
> create a join  
> between the “pairings” and “pairings\_stories” tables with the ON  
> clause being  
> “pairings.id = pairings\_stories.pairing\_id”.

Thanks for the reply. With the above do you mean like this?

select distinct(pairings.id), pairings.description from pairings  
right join pairings\_stories on pairings.id = pairings\_stories.pairing\_id

Regards,

Rob

---

<div class="post-metadata">

**Author:** ![zimro](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/z/dbc845/32.png) [@zimro](https://www.ruby-forum.com/u/zimro)\
**Post date:** [April 19, 2006, 3:42pm UTC](https://www.ruby-forum.com/t/newbie-question-select-distinct-in-model/58185/4 "2006-04-19T15:42:08Z")

</div>

On Wednesday 19 April 2006 15:21, Robert Z. wrote:

> With the above do you mean like this?
> 
> select distinct(pairings.id), pairings.description from pairings  
> right join pairings\_stories on pairings.id = pairings\_stories.pairing\_id

More something like

SELECT pairings.id FROM pairings  
JOIN pairing\_stories ON pairings.id = pairing\_stories.pairing\_id

I don’t know if this exact join will work, but it would be something  
along  
these lines. Also, the join is a suggestion. Try it out first to see if  
it  
does what you want. Read the docs about joins of the DB you’re using as  
well,  
to learn what they do exactly.
