2014-11-03 19 views
0

我有2個版本的顯示產品列表的同一索引頁。 常規視圖 - 顯示一覽表 管理視圖 - 顯示的選項來編輯列表,刪除等Rails - 來自同一動作(索引)的多個視圖(管理員,常規)

索引動作只是使數據庫查詢並返回該實例變量。 目前,我有相同的索引操作來渲染索引頁面。我想將索引操作表單產品重用到管理控制器中。

def index 
    @products = Product.all 
end 

路線:

/product/index => product#index 

/admin/product/index => product#index 

我試圖給出[這裏prepend_view_path技術| How can I intercept rails's template rendering,但這樣總是會在兩種情況下都呈現admin/product/index.html.erb文件。

我想要的產品#指數控制器#動作來呈現:

/index.html.erb用於/產品/指數

/管理/產品/index.html.erb for/admin/product/index

Can some其中一個幫助我如何以優雅的方式完成此操作,而不是爲管理員控制器類和產品控制器類編寫相同的操作。 PS:我只用了一週的時間在紅寶石和紅寶石上。任何幫助深表感謝。

回答

0

從你的控制器內,只呈現你想要以服務爲用戶視圖,我的意思是:

ProductsController 
def index 
    # ... 
    render 'index' 
end 

Admin::ProductsController 
def index 
    # ... 
    render 'products/index' 
end 
+0

是的,但是如果我創建了2個單獨的控制器動作,那麼您添加的#...部分需要在兩個動作中複製 – AdRoiT 2014-11-03 15:57:39

+0

然後解釋您的控制器層次結構。 'ProductsController'是'Admin :: ProductsController'的祖先或後代? – blelump 2014-11-03 16:01:55

+0

ProductsController和AdminController是不同的,但我想在AdminController中使用ProductsController的索引操作,因爲方法是完全一樣的 – AdRoiT 2014-11-03 16:29:54

0

路線中存在錯誤。

/產品/指數=>產品#索引

/管理/產品/指數=>產品#索引

都指向相同的位指示的名稱作爲產物。

我會建議這些路線

resources :admin do 
    resources :product do 
    end 
end 

resources :product do 
end 

這樣,你要確保你有兩個產品的控制器。 一個具有管理員:: ProductController的 二ProductController的

admin_product_path的管理視圖 product_path爲普通視圖

相關問題