如果只有某種視圖繼承...所以,可以不需要提供所有視圖的子類控制器。好的是,這是patch。糟糕的是,它無法在一段時間內達到核心水平。
將它應用到我的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_'
不是一件容易的路線,傑福。但是,嘿,在這一點之後,所有的東西都能正常工作(假設你使用了固定路徑助手)並且使用了ProductController視圖和partials。
共享視圖改變
每個子類控制器都有自己的index.html.erb的版本。其他所有內容都在基類中共享。
說說共享模板中的路徑助手。曾經被認爲是
<% form_for @product ... %>
成爲
<% form_for [controller_name, @product] ... %>
和變薄像
<%= link_to products_path %>
轉成
<%= link_to send("#{controller_name}_products_path") %>
我不知道這是否是一切都是值得的,但那是一種方式。任何人都知道爲什麼如果有計劃很快將這個補丁包含在rails中?
即使在非編輯視圖中,在視圖中也需要一些智能來確定是否顯示編輯鏈接 - 除非您只是希望它對非管理員失敗。我寧願它不可見。因此,除非您想爲管理員/普通用戶完全分開視圖,否則必須在控制器和視圖之間引入更多的耦合。 – tvanfosson 2009-04-26 12:36:35