2013-03-26 3 views
1

У меня есть вложенный ресурс в приложении Rails 3.2.Как абстрагироваться link_tos для вложенных ресурсов на нескольких моделях

resources :users do 
    resources :posts 
end 

resources locations do 
    resources :posts 
end 

resources categories 
    resources :posts 
end 

В общем модуле боковой панели отображается на пользователь, местоположение и категорию показывать страницы У меня есть ссылка на вложенный ресурс

<% if controller.class == UsersController %> 
    <%= link_to "Posts", user_posts_path(@user) %> 
<% elsif controller.class == LocationsController %> 
    <%= link_to "Posts", location_posts_path(@location) %> 
<% elsif controller.class == CategoriesController %> 
    <%= link_to "Posts", category_posts_path(@category) %> 
<% end %> 

Есть умный способ DRY это? Я думаю, что-то вроде <%= link_to "Posts", controller_name_posts_path(@current_object) %>

ответ

1

Это не так умно, как это, но я упростил бы как первый шаг, определив @resource_path (фактически, я бы, вероятно, разоблачил метод) в каждом контроллере, чтобы упростить шаблон вида что-то вроде

<%= link_to "Posts", @resource_path %> 

в действии контроллера - что-то вроде:

@resource_path = user_posts_path(@user) 

или аналогичный

+0

Отлично! Я знал, что я что-то пропускаю. Спасибо. –

+0

NP :-) Я обычно обнаруживаю, что движущаяся логика из вида по возможности приводит к выигрышу большую часть времени –

0

Использование content_for (или просто предоставить) должен делать трюк.

Не касаясь контроллер добавить вызов content_for в верхней части вашего зрения шоу-файлов:

пример для пользователей/шоу:

<% content_for :resource_path, user_posts_path(@user) %> 

В вашей общей модуль боковой панели изменить блок кода до:

<%= link_to "Posts", yield :resource_path %> 
+0

отличная идея, спасибо –

Смежные вопросы