# Find unused items

**URL:** <https://www.ruby-forum.com/t/find-unused-items/174259>\
**Category:** Rails\
**Created:** [August 23, 2009, 10:19pm UTC](https://www.ruby-forum.com/t/find-unused-items/174259 "2009-08-23T22:19:20Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![arwed](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/54ee81/32.png) [@arwed](https://www.ruby-forum.com/u/arwed)\
**Post date:** [August 23, 2009, 10:19pm UTC](https://www.ruby-forum.com/t/find-unused-items/174259/1 "2009-08-23T22:19:20Z")

</div>

This works, but I am sure there is a better way todo this:

# GET /posts/1/edit

def edit  
@post = Post.find(params[:id])  
# Find user galleries that have not been used in posts yet  
usergalleries = Array.new  
@post.user.galleries.each do |pug|  
usergalleries \<\< pug.id  
end  
userpostgalleries = Array.new  
@post.user.posts.each do |pup|  
userpostgalleries \<\< pup.gallery\_id  
end  
aug = usergalleries - userpostgalleries  
@availableusergalleries = @post.user.galleries.find  
(:all, :conditions =\> { :id =\> aug })  
end

Any ideas?

Regards  
Arwed

---

<div class="post-metadata">

**Author:** ![arwed](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/54ee81/32.png) [@arwed](https://www.ruby-forum.com/u/arwed)\
**Post date:** [August 24, 2009, 12:24am UTC](https://www.ruby-forum.com/t/find-unused-items/174259/2 "2009-08-24T00:24:01Z")

</div>

Quoting arwed [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid):

> ```
> end
> 
> ```

# @post = Post.find(params[:id])

```
 @post = Post.find(params[:id], :include => {:user => [:galleries, 

```

:posts]})

# One database call instead of many. I think this is correct form, but

# have no easy way to test it.

# # Find user galleries that have not been used in posts yet

# usergalleries = Array.new

# @post.user.galleries.each do |pug|

# usergalleries \<\< pug.id

# end

```
 user_galleries = @post.user.galleries.map{|pug| pug[:id]}

```

# I find pug[:id] more reliable than pug.id; the latter in some contexts

is

# interpreted as the Object id, instead of the primary key/ID from the

# database and a deprecation warning is given.

# userpostgalleries = Array.new

# @post.user.posts.each do |pup|

# userpostgalleries \<\< pup.gallery\_id

# end

```
 user_post_galleries = @post.user.posts.map{|pup| pup.gallery_id}

 aug = usergalleries - userpostgalleries

```

# @availableusergalleries = @post.user.galleries.find(:all,

:conditions =\>  
{ :id =\> aug })  
@availableusergalleries = @post.user.galleries.find(aug)

# ActiveRecord.find will take an array of IDs.

Another way that takes less memory (if speed is of more concern,  
benchmark  
both):

```
aug = @post.user.galleries.map{|pug| pug[:id]}
@post.user.posts.each{|pup| aug.delete(pup.gallery_id)}

@availableusergalleries = Gallery.find(aug)

```

HTH,  
Jeffrey

---

<div class="post-metadata">

**Author:** ![arwed](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/a/54ee81/32.png) [@arwed](https://www.ruby-forum.com/u/arwed)\
**Post date:** [August 24, 2009, 9:17am UTC](https://www.ruby-forum.com/t/find-unused-items/174259/3 "2009-08-24T09:17:49Z")

</div>

Hi Jeffrey,

thanks a lot for your help.  
You made my day!

Regards  
Arwed
