2013-04-24 2 views
0

Данные для моего приложения структурировано:Рельсов вложенных ресурсов с красивыми URL, для пользователей

  • организация имеет пользователей
  • Организаций сообщения
  • организации имеют сайты

Я бы нормально использовать вложенные ресурсы, чтобы сделать это ОТДЕЛЬНО:

resources :organizations do 
    resources :users 
    resources :messages 
    resources :sites 
end 

Что дает мне URL-адреса, такие как:

/organizations/12/messages 
/organizations/12/sites 

Эти словесные URL-превосходны, когда администратор должен создать сообщение для организации, поскольку URL содержит организации идентификатор.

Однако, я хотел бы показать обычные пользователь довольно URL-адрес, такие как:

/messages 
/sites 

Есть ли способ псевдонима этой симпатичную URL, чтобы /organizations/{current_user.organization.id}/*?

+0

Что вы подразумеваете под /organizations/{current_user.organization.id}/*? –

+0

Вы имеете в виду, что вы хотите, чтобы ваш администратор мог видеть, что у них много организаций, и обычный пользователь не может его увидеть? – Awea

+0

@Awea: Да. Я бы хотел, чтобы администраторы могли добавлять сообщения и изменять сайты для всех организаций, поэтому в этом случае более полезные URL-адреса полезны. – Brian

ответ

0

Вам необходимо пройти идентификацию организации. Например, если у вас есть пользователь, который принадлежит к организации, и пользователь вошел в систему, Вы можете получить ID организации через CURRENT_USER следующим образом:

class MessageController < ApplicationController 
before_filter :get_organization 
# ... 
private 
    def get_organization 
    @organization = current_user.organization 
    end 
end 

И в маршрутах вы можете добавить:

resources :messages 
resources :organizations do 
    resources :messages 
end 

Существуют и другие решения, но это зависит от того, как вы можете получить идентификатор организации.