views:

33

answers:

1

Hi all,

I have an app where a 'user' belong to a 'client' or a 'vendor' (and client and vendor has_many users). In the admin namespace, I want to administer these users - so an admin would choose a client or a vendor, then nav to that client's or vendor's users. My question is, short of making the user model polymorphic, how could I model/route this?

Here is what I have in terms of routing:

map.namespace :admin do |admin|
  admin.resources :clients
  admin.resources :vendors
end

I know I could do something like:

map.namespace :admin do |admin|
  admin.resources :clients do |client|
    client.resources :users
  end
  admin.resources :vendors do |vendor|
    vendor.resources :users
  end
end

But the above would definitely need me to treat the User as polymorphic.

I'm just wondering what you would recommend or what my options are.

Thanks.

A: 

I would try the second solution and construct your links like this:

<%= link_to @vendor_or_client.name, [:admin, @vendor_or_client, @user] %>

Means: the magic comes from the Array syntax automatically. The same goes with render:

<%= render [:admin, @vendor_or_client, @user] %>
<%= render [:admin, @vendor_or_client] %>

It will automatically render views/admin/users/_show.html.erb or views/admin/{vendors,clients}/_show.html.erb respectively. You can also use this Array syntax with forms etc. It will be pretty straight forward and you should have no problem with polymorphic routes.

hurikhan77