Если бы только было какое-то наследование представлений ... Так, чтобы можно было создать подкласс контроллера без необходимости предоставлять все его представления. Хорошо, что есть этот патч . Плохо то, что он долго не может дойти до ядра.
Применив его к моим рельсам 2.2, мне удалось получить следующий ответ на исходный вопрос.
Контроллер подклассов
ProductController был благословлен близнецами:
class Products::AdminController < ProductsController
layout 'admin'
before_filter :authenticate
end
и
class Products::StoreController < ProductsController
layout 'store'
before_filter :find_cart
end
Само это выглядит довольно неплохо, поскольку каждый из них также имеет свою собственную часть инициализации.
Изменение маршрутов
map.resources :products, :controller => 'products/admin', :path_prefix => 'admin',
:name_prefix => 'admin_'
map.resources :products, :controller => 'products/store', :path_prefix => 'store',
:only => [:show, :index], :name_prefix => 'store_'
Не простой маршрут, дефо. Но, эй, после этого все просто работает (при условии, что вы исправили пути помощников) с представлениями и частями ProductController.
Изменения общих представлений
Каждый контроллер подкласса имеет свою собственную версию index.html.erb. Все остальное делится в базовом классе.
Говоря о помощниках пути в общих шаблонах. Что раньше было
<% form_for @product ... %>
становится
<% form_for [controller_name, @product] ... %>
и тоньше, как
<%= link_to products_path %>
превращается в
<%= link_to send("#{controller_name}_products_path") %>
Я не знаю, стоит ли все это, но это способ. Кто-нибудь знает почему, если в ближайшее время планируется включить этот патч в рельсы?