1

Rails3.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 に答える