2017-03-21 67 views
2

如果可能,我想獲得一些反饋。我有這個文件夾結構從管理資產中分離前端資產

rails 
- app 
-- controllers 
--- admin 
--- front 

所以基本上我有兩個frontadmin命名空間cotrollers一個Rails應用程序。然而,資產有此刻的默認設置,這樣

assets 
- stylesheets 
- javascripts 

所以application.scss加載所有的CSS正面和管理

* 
*= require_tree . 
*= require_self 

如何指定前端佈局只加載所需的資產前端(而不是管理員)和管理佈局只加載管理資產而不是前端資產?

+0

可能不是最乾淨的方式,但您始終可以使用兩種不同的佈局並以此方式引用必要的資源。 –

回答

4

您可以創建兩個清單文件(而不是使用默認的application.js/application.scss),包括他們在不同的佈局(一個爲front,一個用於admin)。

例如,你可以使用此文件夾結構:

assets 
- javascripts 
-- admin 
-- front 
- stylesheets 
-- admin 
-- front 
- admin.scss 
- front.scss 

內每個管理/前面的文件夾,您可以添加特定的樣式/腳本需要的,然後確保你的清單文件看起來像這樣(只顯示風格艙單,同樣適用於腳本):

admin.scss

/* 
* Manifest file for admin styles, to be compiled into admin.scss 
* 
*= require_self 
*= require_tree ./admin 
*/ 

front.scss

/* 
* Manifest file for front styles, to be compiled into front.scss 
* 
*= require_self 
*= require_tree ./front 
*/ 

現在,你必須創建佈局(在app/views/layouts):

admin.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    ... title and metas 
    <%= stylesheet_link_tag 'admin', media: 'all' %> 
    <%= javascript_include_tag 'admin' %> 
    </head> 
    <body> 
    ... layout content 
    </body> 
<html> 

front.html.erb

<!DOCTYPE html> 
<html> 
    <head> 
    ... title and metas 
    <%= stylesheet_link_tag 'front', media: 'all' %> 
    <%= javascript_include_tag 'front' %> 
    </head> 
    <body> 
    ... layout content 
    </body> 
<html> 

最後,必須添加清單文件config/initializers/assets.rb需要預編譯:

... some code 
Rails.application.config.assets.precompile += %w(admin.scss front.scss) 
Rails.application.config.assets.precompile += %w(admin.js front.js) 

現在您只需在渲染視圖時使用所需的佈局(admin.html.erbfront.html.erb) 。

+0

嗨,我刪除了layouts/application.html.erb並在同一個地方創建(admin.html.erb和front.html.erb)。我也在assets.rb中添加了清單文件,但是當我嘗試訪問我的前臺時,front.html.erb未加載。 – Eduardorph