Anda tidak boleh memuat file JS atau CSS Anda di luar pipa aset karena Anda kehilangan fitur penting yang membuat Rails begitu hebat. Dan Anda tidak perlu permata lain. Saya percaya menggunakan permata sesedikit mungkin, dan menggunakan permata tidak perlu di sini.
Apa yang Anda inginkan dikenal sebagai "Kontroler Javascript Khusus" ("Aksi Javascript Khusus termasuk di bagian bawah). Ini memungkinkan Anda untuk memuat file JavaScript spesifik untuk CONTROLLER tertentu. Mencoba menghubungkan Javascript Anda ke Tampilan adalah jenis .. .mundur dan tidak mengikuti pola desain MVC. Anda ingin mengaitkannya dengan Pengontrol Anda atau tindakan di dalam Pengontrol Anda.
Sayangnya, untuk alasan apa pun, Rails devs memutuskan bahwa secara default, setiap halaman akan memuat setiap file JS yang terletak di direktori aset Anda. Mengapa mereka memutuskan untuk melakukan ini alih-alih mengaktifkan "Controller Specific Javascript" secara default saya tidak akan pernah tahu. Ini dilakukan melalui file application.js, yang termasuk baris kode berikut secara default:
//= require_tree .
Ini dikenal sebagai arahan . Itulah yang digunakan sprocket untuk memuat setiap file JS di direktori assets / javascripts. Secara default, sprocket secara otomatis memuat application.js dan application.css, dan direktif_tree memuat setiap file JS dan Coffee di masing-masing direktori.
CATATAN: Ketika Anda perancah (jika Anda tidak perancah, sekarang adalah waktu yang tepat untuk memulai), Rails secara otomatis menghasilkan file kopi untuk Anda, untuk pengontrol perancah itu. Jika Anda menginginkannya untuk menghasilkan file JS standar alih-alih file kopi , maka hapus permata kopi yang diaktifkan secara default di Gemfile Anda , dan perancah Anda akan membuat file JS sebagai gantinya.
Oke, jadi langkah pertama untuk mengaktifkan "Kontroler Javascript Khusus" adalah menghapus kode require_tree dari file application.js Anda, ATAU ubah ke folder di dalam direktori aset / javascripts Anda jika Anda masih memerlukan file JS global. YAITU:
//= require_tree ./global
Langkah 2: Buka file config / initializers / assets.rb Anda, dan tambahkan yang berikut ini:
%w( controllerone controllertwo controllerthree ).each do |controller|
Rails.application.config.assets.precompile += ["#{controller}.js", "#{controller}.css"]
end
Masukkan nama Controller yang Anda inginkan.
Langkah 3: Ganti file javascript_include_tag di file application.html.erb Anda dengan ini (perhatikan bagian params [: controller]:
<%= javascript_include_tag 'application', params[:controller], 'data-turbolinks-track': 'reload' %>
Mulai ulang server dan biola Anda! File JS yang dihasilkan dengan perancah Anda sekarang hanya akan memuat ketika kontroler itu dipanggil.
Perlu memuat file JS tertentu pada AKSI spesifik di controller Anda , IE / artikel / baru ? Lakukan ini sebagai gantinya:
application.html.erb :
<%= javascript_include_tag "#{controller_name}/#{action_name}" if AppName::Application.assets.find_asset("#{controller_name}/#{action_name}") %>
config / initializers / assets.rb :
config.assets.precompile += %w(*/*)
Kemudian tambahkan folder baru dengan nama yang sama seperti Anda controller di folder aset / javascripts Anda dan letakkan file js Anda dengan nama yang sama dengan tindakan Anda di dalamnya. Ini kemudian akan memuatnya pada tindakan spesifik itu.