---
# System prepended metadata

title: '[Rails4][front-end]在不修改前端資源(.css,.js,圖片等)排列位置的情形下引用前端Assets檔'
tags: [Rails4, front-end]

---

# [Rails4][front-end]在不修改前端資源(.css,.js,圖片等)排列位置的情形下引用前端Assets檔

###### tags: `Rails4`,`front-end`

Ruby : 2.2.6
Rails: 4.2.8


假設現在做一個專案,想要套用網路現成的模板如[adminLTE](https://adminlte.io/)等,
通常這類模板會使用許多的前端套件,而這些套件都是將css跟js混合放在一個資料夾內,
此時要根據rails預設的方式將css跟js取出後各自分開放在assets/stylesheets跟assets/javascripts資料夾中是很不切實際的作法,


這時直接將前端資源檔原封不動放在vendor資料夾(或其他放前端資源用的資料夾也可)內,
再藉由修改config/initializers/assets.rb來引用這些資源.


假設我們把前端檔案放在vendor/admin-lte內,

現在想要引用vendor/admin-lte/plugins/fontawesome-free/css/all.min.css
跟dist/css/adminlte.min.css,

作法如下:

config/initializers/assets.rb
```ruby
#...

#此段語法是將陣列內的路徑加入編譯路徑中
[
  "vendor/assets/",
  "vendor/admin-lte/"
].each{|x|
  Rails.application.config.assets.paths << x
}

#此段語法是設定要進行編譯的檔案
Rails.application.config.assets.precompile += [

    #編譯特定檔案的寫法
    "plugins/fontawesome-free/css/all.min.css",
    "dist/css/adminlte.min.css",
  
    #也可改成以下寫法一次引用多個檔案  
    # css
    "plugins/*.css",
    "dist/*.css",

    # js
    "plugins/*.js",
    "dist/*.js",

    #img
    "dist/img/*.jpg",
    "dist/img/*.png",
]
```


在view中引用資源
```htmlmixed=
...
 <!--css-->
  <%= stylesheet_link_tag 'plugins/fontawesome-free/css/all.min.css', :media => "all" %>
  <%= stylesheet_link_tag  'dist/css/adminlte.min.css' ,:media => "all" %>

...

<!--js-->
<%= javascript_include_tag "plugins/jquery/jquery.min.js" %>

...

<!--image-->
 <!--<img src="dist/img/user2-160x160.jpg" class="img-circle elevation-2" alt="User Image">-->
<%= image_tag("dist/img/user2-160x160.jpg",class: "img-circle elevation-2" ,alt: "User Image") %>

...

```
>副檔名不須省略
