[Rails] Re: Rails Routes/Controller/Directory Structure design question
On May 27, 9:02 pm, David Kahn <d...@structuralartistry.com> wrote:
> On Fri, May 27, 2011 at 7:55 PM, egervari <ken.egerv...@gmail.com> wrote:
> > I have a design question where I would appreciate a thoughtful
> > response.
>
> > Let's say you have a simple application (for example's sake) that has
> > a User, Company and Theme model. A Company `has_one` Theme and
> > `has_many` Users.
>
> > Administrators (a User) can fully manage Companies and Themes - the
> > whole REST stack, in addition to a few other actions too.
> > Administrators are expected to do things to Companies and themes that
> > other user roles cannot do.
>
> > We also have a Company role. This role can edit their own Company, as
> > well as select a Theme from the ones the admin-user added as nice
> > defaults, or they can just make their own theme.
>
> > Now, here we have some non-trivial design choices, and I would like to
> > know what the best-practice is.
>
> > **PART 1**
>
> > In Rails, it makes sense to have
> > `resources :users, :companies, :themes` for the administrators and
> > probably `resource :company, :theme, :users` for the Company users.
>
> > But of course, we run into some naming conflicts here - both singular
> > and plural - so we might want to try something like
> > `resource :my_company, :my_theme, :my_users` to separate them? Or is
> > there a better solution?
>
> > Furthermore, a theme is just a component of a company, so maybe we
> > want to nest them?
>
> > :resource :my_company do
> > :resource :theme
> > :resources :users
> > end
>
> > This works okay, but it could be confusing as to which UsersController
> > we are referring to... no? This is really sticky and I would love to
> > know how to deal with this. Do you have 1 controller, or 2? What do
> > you name them?
>
> > But then I look at the url, and it's kind of silly:
>
> > http://myapp.com/my_company/my_theme/edit
>
> > I guess it could be worse.
>
> > Company users also might want the list of themes via ajax, so is it
> > correct for them to call:
>
> > http://myapp.com/themes.json
>
> > ?
>
> > Is this how to approach this situation, or is there a better way?
>
> > **PART 2**
>
> > Also, what should your directory structure look? Should you have
> > controllers separated by user role?
>
> > /app/controllers/admin/companies_controller.rb
> > /app/controllers/admin/themes_controller.rb
> > /app/controllers/admin/users_controller.rb
> > /app/controllers/company/my_company_controller.rb
> > /app/controllers/company/theme_controller.rb
> > /app/controllers/company/users_controller.rb
>
> > Or is there better ways to handle this?
>
> Look into namespacing your routes. So you could end up with the directory
> structure above, and have it be clean like:
>
> resources :company
> resources :theme
> resources :users
>
> namespace :admin
> resources :company
> .....
> end
Interesting... I forgot about namespaces. So you suggest namespacing
the admin, but nest "my_company"?
Also, how is my proposed directory structure? Sound good? Is there a
better way?
--
You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group.
To post to this group, send email to rubyonrails-talk@googlegroups.com.
To unsubscribe from this group, send email to rubyonrails-talk+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home