# Call for patterns

**URL:** <https://www.ruby-forum.com/t/call-for-patterns/59137>\
**Category:** Rails\
**Created:** [April 28, 2006, 11:12pm UTC](https://www.ruby-forum.com/t/call-for-patterns/59137 "2006-04-28T23:12:03Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![iktorn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/b487fb/32.png) [@iktorn](https://www.ruby-forum.com/u/iktorn)\
**Post date:** [April 28, 2006, 11:12pm UTC](https://www.ruby-forum.com/t/call-for-patterns/59137/1 "2006-04-28T23:12:03Z")

</div>

Hi group,

I was wondering if anyone more experienced could help me to find a good  
pattern for two things:

1. How to group controllers. Example:  
We have an admin panel with:  
user\_managment\_controller.rb  
priv\_managment\_controller.rb  
widget\_controller.rb  
User panel with:  
mystuff\_controller.rb  
mytags\_controller.rb  
profile\_controller.rb  
And frontend with:  
widget\_controller.rb  
etc…

How do I group those controllers? Should I put them in subdirectories?  
Does rails support this automagically?

and

1. I have a model/table Widget with fields a,b,c,etc.  
Lets say guest can edit fields a,b  
users: a,b,c,d  
moderators1: a,b,c,d,e,f,g  
moderators1: a,b,c,d,g,h,i  
admins: a-z

How do I implement this? Can I create a model-class for each user-group?  
How do I make sure that certain fields cannot be edited (for example by  
Widget.update\_attributes(params[:widget])?

Thanks

PS: Obviously I want to make it ADAP (as DRY as possible) 🙂

---

<div class="post-metadata">

**Author:** ![iktorn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/b487fb/32.png) [@iktorn](https://www.ruby-forum.com/u/iktorn)\
**Post date:** [May 3, 2006, 7:09pm UTC](https://www.ruby-forum.com/t/call-for-patterns/59137/2 "2006-05-03T19:09:40Z")

</div>

Hi there,

On 4/28/06, Wiktor [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> widget\_controller.rb  
> User panel with:  
> mystuff\_controller.rb  
> mytags\_controller.rb  
> profile\_controller.rb  
> And frontend with:  
> widget\_controller.rb  
> etc…
> 
> How do I group those controllers? Should I put them in subdirectories?  
> Does rails support this automagically?

Yep, subdirectories are the way to go:

ruby script/generate controller admin/user\_management  
ruby script/generate controller user/mystuff  
etc…

you can move your existing controllers to sub-directories, you just need  
to  
modify them slightly:

class UserManagementController \< ApplicationController

becomes

class Admin::UserManagementController \< ApplicationController

and

> Widget.update\_attributes(params[:widget])?
> 
> Thanks
> 
> PS: Obviously I want to make it ADAP (as DRY as possible) 🙂

That’s been done for you too. Check out  
[http://perens.com/FreeSoftware/ModelSecurity/](http://perens.com/FreeSoftware/ModelSecurity/)

–  
Scott B.  
Web D.  
Electro Interactive  
Web: [http://www.ElectroInteractive.com](http://www.ElectroInteractive.com)  
Blog: [http://synthesis.sbecker.net](http://synthesis.sbecker.net)

---

<div class="post-metadata">

**Author:** ![iktorn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/b487fb/32.png) [@iktorn](https://www.ruby-forum.com/u/iktorn)\
**Post date:** [May 5, 2006, 10:55am UTC](https://www.ruby-forum.com/t/call-for-patterns/59137/3 "2006-05-05T10:55:33Z")

</div>

Thanks Scott,

> Yep, subdirectories are the way to go:

Ok, and how do I use them in routes/link\_to?

:controller =\> ???

---

<div class="post-metadata">

**Author:** ![iktorn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/b487fb/32.png) [@iktorn](https://www.ruby-forum.com/u/iktorn)\
**Post date:** [May 16, 2006, 6:06pm UTC](https://www.ruby-forum.com/t/call-for-patterns/59137/4 "2006-05-16T18:06:24Z")

</div>

Scott B. wrote:

> if you guessed:
> 
> :controller =\> ‘admin/user\_management’
> 
> or
> 
> :controller =\> ‘user/mystuff’
> 
> then you were absolutely right! 🙂

🙂 Thanks Scott… one more thing

is there a way to do (the code below doesn’t work…):

map.connect ‘:controller\_without\_module/:action/:id’,  
:controller =\> ‘module/:controller\_without\_module’

I need it to:  
map.forum ‘:controller\_without\_module/:action/:id’,  
:controller =\> ‘forum/:controller\_without\_module’,  
:requirements =\> { :subdomain =\> ‘forum’ }

---

<div class="post-metadata">

**Author:** ![iktorn](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/i/b487fb/32.png) [@iktorn](https://www.ruby-forum.com/u/iktorn)\
**Post date:** [May 9, 2006, 3:17am UTC](https://www.ruby-forum.com/t/call-for-patterns/59137/5 "2006-05-09T03:17:19Z")

</div>

if you guessed:

:controller =\> ‘admin/user\_management’

or

:controller =\> ‘user/mystuff’

then you were absolutely right! 🙂

–  
Scott B.  
Web D.  
Electro Interactive, Inc.

> **[Electro Interactive - Web Development. Ruby on Rails. Web Standards.](http://www.electrointeractive.com)**
>
> Electro Interactive is a full service new media design and development company.
