1

我在 Rails 3.2 应用程序中有一个嵌套资源。

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 %>

有没有聪明的方法来干燥这个?我在想类似的东西<%= link_to "Posts", controller_name_posts_path(@current_object) %>

4

2 回答 2

1

它没有那么聪明,但我会通过在每个控制器中定义 @resource_path (实际上我可能会公开一个方法)来简化第一步,以便将视图模板简化为类似

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

在控制器动作中 - 类似于:

@resource_path = user_posts_path(@user) 

或类似的

于 2013-03-26T03:21:48.393 回答
0

使用content_for(或仅提供)也应该可以解决问题。

无需触摸控制器,即可在视图显示文件的顶部添加对content_for的调用:

用户/节目示例:

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

在您的共享侧边栏模块中,将您的代码块更改为:

<%= link_to "Posts", yield :resource_path %>
于 2013-03-26T12:43:53.267 回答