Saya menggunakan Ruby on Rails 3 dan saya ingin memindahkan beberapa kode khusus dan bersama dalam sebuah modul.
- Sintaks apa yang harus saya gunakan untuk menulis kode modul?
- Di folder mana dari aplikasi saya, saya harus meletakkan file modul?
- Bagaimana saya harus memasukkan modul itu dalam satu atau lebih kelas pengontrol?
- Tindakan lain apa, jika ada, yang harus saya gunakan di modul kustom di mana pun dalam aplikasi saya?
- Bagaimana cara memanggil metode dalam modul dari aplikasi saya?
Terima kasih sebelumnya.
ruby-on-rails-3
module
pengguna502052
sumber
sumber
Jawaban:
To 1. Sebuah modul dibuat / dibuka hanya dengan mengatakan:
module MyModule def first_module_method end end
Ke 2.
lib
Folder. Jika Anda ingin mengatur modul Anda dilib
folder, Anda dapat memasukkannya ke dalam modul itu sendiri. Misalnya, jika Anda menginginkan subfolder,super_modules
modul Anda akan ditentukan sebagai berikut:module SuperModules module MyModule def first_module_method end end end
Sampai 3./5. Saat menyertakan modul dalam kelas, Anda cukup memanggil metode modul seolah-olah mereka didefinisikan dalam kelas:
class MyClass include MyModule def some_method first_module_method #calls module method end end
Ke 4. Pertama, pastikan bahwa modul Anda benar-benar dibutuhkan di setiap kelas aplikasi Anda. Jika tidak, masuk akal untuk hanya memasukkannya di tempat yang diperlukan agar tidak membengkak kelas yang tidak membutuhkannya. Jika Anda benar-benar ingin modul ini ada di mana-mana, termasuk melihat hierarki kelas kelas Anda di aplikasi. Apakah Anda menginginkan modul di semua model? Anda dapat membuka ActiveRecord :: Base dan menambahkan modul Anda di sana.
sumber
lib
folder, catatan penting adalah untuk memungkinkan Rails3 tanda komentar pada baris dalamconfig\application.rb
untukconfig.autoload_paths
- baca misalnya, stackoverflow.com/questions/1073076/rails-lib-modules-and ... Catatan juga bahwa Anda harus berhati-hati dalam menggunakan nama file untuk modul Anda yang cocok dengan nama modul itu sendiri. Jadi jika Anda menyimpannyalib/test/my_module.rb
, Anda harusinclude Test::MyModule
- untuk lebih jelasnya lihat stackoverflow.com/questions/4073856/rails-3-autoloadapp/models
jika kode memerlukan akses ke model lain. Jika kode Anda benar-benar 'perpustakaan' dan bisa ada sendiri, saya menyarankan untuk menjual permata. Sebagai contoh, lihat github.com/shageman/the_next_big_thingA> 1. Anda dapat menggunakan sintaks yang sama seperti kelas ruby lainnya. Misalnya, saya mendefinisikan modul VehicleClassifer yang akan menggunakan metode classify_vehicle untuk mengklasifikasikan kendaraan berdasarkan jumlah roda yang diterimanya sebagai input.
module VehicleClassifer def classify_vehicle(number_of_wheels) VehicleType.where("number_of_wheels = ?", number_of_wheels) end end
A> 2. Modul biasanya disimpan di folder / lib.
pertanyaan 3,4,5 memiliki jawaban yang kurang lebih sama. kamu bisa memakai
class SomeController < ApplicationController include VehicleClassfier def index classify_vehicle(4) end end
di kelas Anda menggunakan modul dan Anda akan memiliki akses ke semua metode modul.
Selain itu, jika Anda perlu menggunakan modul di seluruh aplikasi Anda, Anda dapat memasukkannya ke dalam pengontrol aplikasi Anda.
sumber
ApplicationHelper
?