# Model.models.models or model.models.find(:first).models

**URL:** <https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992>\
**Category:** Rails\
**Created:** [April 17, 2006, 7:29pm UTC](https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992 "2006-04-17T19:29:22Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![pete](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/3ab097/32.png) [@pete](https://www.ruby-forum.com/u/pete)\
**Post date:** [April 17, 2006, 7:29pm UTC](https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992/1 "2006-04-17T19:29:22Z")

</div>

I the following three models which all have has\_and\_belongs\_to\_many

# User \<-\> UserGroup \<-\> Permissions

class UserGroup \< ActiveRecord::Base  
has\_and\_belongs\_to\_many :users, :join\_table =\> “user\_usergroup\_join”  
has\_and\_belongs\_to\_many :permissions, :join\_table =\>  
“usergroup\_permission\_join”, :uniq =\> true

end

I can do this:

permissions = user.user\_groups.find(:first).permissions

but not:

permissions = user.user\_groups.permissions

I want to get all the user permissions, do I have to loop though each  
user group and add the permission from each one by one?

Many thanks in advance!

---

<div class="post-metadata">

**Author:** ![pete](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/3ab097/32.png) [@pete](https://www.ruby-forum.com/u/pete)\
**Post date:** [April 17, 2006, 7:49pm UTC](https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992/2 "2006-04-17T19:49:44Z")

</div>

The problem here is that

‘user.user\_groups’ returns an array of activerecord objects  
You can’t use an association on an array.

Something like this may work.

user.user\_groups.collect {|o| o.permissions}.flatten.uniq

Which will give you an array that contains the unique permission objects  
for all entries (I think).

On Monday, April 17, 2006, at 7:29 PM, Pete wrote:

> user group and add the permission from each one by one?
> 
> Many thanks in advance!
> 
> –  
> Posted via [http://www.ruby-forum.com/](http://www.ruby-forum.com/).
> 
> * * *
> 
> Rails mailing list  
> removed\_email\_address@domain.invalid  
> [http://lists.rubyonrails.org/mailman/listinfo/rails](http://lists.rubyonrails.org/mailman/listinfo/rails)

\_Kevin

---

<div class="post-metadata">

**Author:** ![pete](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/3ab097/32.png) [@pete](https://www.ruby-forum.com/u/pete)\
**Post date:** [April 20, 2006, 12:55pm UTC](https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992/3 "2006-04-20T12:55:27Z")

</div>

Thanks!

---

<div class="post-metadata">

**Author:** ![pete](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/p/3ab097/32.png) [@pete](https://www.ruby-forum.com/u/pete)\
**Post date:** [April 21, 2006, 12:31pm UTC](https://www.ruby-forum.com/t/model-models-models-or-model-models-find-first-models/93992/4 "2006-04-21T12:31:37Z")

</div>

user.user\_groups.class =\> Array  
user.user\_groups.find(:all).class =\> Array

permissions = user.user\_groups.collect {|o| o.permissions}.flatten.uniq  
permissions.class =\> Array  
permissions.find(:all) =\> method missing

How come I can do a find on one array, but not another?  
I understand the Array class has no find and AR class does, so how does  
this work?

My alternative to using find is to use ‘each’ on the array and check for  
matching records, it works, but does this look correct?

def has\_permission?(controller, action)  
for p in self.permissions do  
if p.controller == controller && p.action == action  
return true  
end  
end  
return false  
end

def permissions  
self.user\_groups.collect {|o| o.permissions}.flatten.uniq  
end
