# Ordering a collection of items

**URL:** <https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801>\
**Category:** Rails\
**Created:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801 "2006-11-07T10:57:04Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![postscript07](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/9e8a1a/32.png) [@postscript07](https://www.ruby-forum.com/u/postscript07)\
**Post date:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801/1 "2006-11-07T10:57:04Z")

</div>

Items table  
id  
creator\_id  
updated\_at

Users table  
id

Itemlinks table  
user\_id  
item\_id

## User model

has\_many :items\_as\_creator, :order =\> created\_at  
has\_many :items\_through\_itemlinks, :order =\> created\_at

def items  
i = items\_as\_creator + item\_through\_itemlinks  
return i.uniq  
end

the question is, how do I ensure that the collection of items  
user.items is sorted by created\_at? the orders on the has\_manys don’t  
work: consider

items\_as\_creator { {item created 2 seconds ago }, {item created 3  
seconds ago} }  
items\_through\_itemlinks { {item created 1 second ago}, {item created 2  
seconds ago} }

then items is like { {item created 2 seconds ago }, {item created 3  
seconds ago} {item created 1 second ago} }

i want items to be in the order { {item created 1 seconds ago }, {item  
created 2 seconds ago} {item created 3 second ago} }

please help! 🙂

---

<div class="post-metadata">

**Author:** ![postscript07](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/9e8a1a/32.png) [@postscript07](https://www.ruby-forum.com/u/postscript07)\
**Post date:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801/2 "2006-11-07T10:57:06Z")

</div>

solution:

```
i.uniq!
i = i.sort_by { |idea| idea.created_at }
i.reverse!
```

---

<div class="post-metadata">

**Author:** ![postscript07](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/9e8a1a/32.png) [@postscript07](https://www.ruby-forum.com/u/postscript07)\
**Post date:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801/3 "2006-11-07T10:57:06Z")

</div>

> item\_id
> 
> the question is, how do I ensure that the collection of items  
> user.items is sorted by created\_at? the orders on the has\_manys don’t  
> work: consider

maybe…

## User model

has\_many :items\_as\_creator, :order =\> ‘items.created\_at’

?

---

<div class="post-metadata">

**Author:** ![postscript07](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/9e8a1a/32.png) [@postscript07](https://www.ruby-forum.com/u/postscript07)\
**Post date:** [November 7, 2006, 10:57am UTC](https://www.ruby-forum.com/t/ordering-a-collection-of-items/74801/4 "2006-11-07T10:57:36Z")

</div>

nope, each of the items sets by created\_at doesn’t work for the reasons  
explained above.
