如果只有某种视图继承......这样就可以继承控制器而无需提供其所有视图。好在有这个补丁。糟糕的是,它在很长一段时间内都无法进入核心。
将它应用到我的 rails 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_'
不是一条容易的路线,defo。但是,嘿,在这一点之后,一切都可以使用 ProductController 视图和部分工作(假设您修复了路径助手)。
共享视图更改
每个子类控制器都有自己的 index.html.erb 版本。其他所有内容都在基类中共享。
谈论共享模板中的路径助手。曾经是什么
<% form_for @product ... %>
变成
<% form_for [controller_name, @product] ... %>
并且像
<%= link_to products_path %>
变成
<%= link_to send("#{controller_name}_products_path") %>
我不知道这是否值得,但这是一种方式。任何人都知道为什么如果计划很快将这个补丁包含在 Rails 中?