2009-12-07 21 views
8

Raylarım uygulamasındaki bazı işlevler, ayrı bir "modül" ise, require aracılığıyla erişilmesi gereken daha iyi görünüyor. Örneğin, Fibonacci sayılarını hesaplamak için bir işlev olduğunu varsayalım.Raylar uygulamasında kendi "modülümü" nereye yerleştirmeliyim?

İşlevler, raylar uygulamasından bağımsızdır ve diğer projelerde yeniden kullanılabilir, bu nedenle uygulama denetleyicileri ve modellerinin yakınında saklanmamalı, sanırım. Ama onu ayrı bir projeye ayırmayacağımdan, vendor klasörüne yerleştirmek doğru olan şey gibi görünmüyor.

O zaman nereye yerleştirmeliyim?

cevap

6

Bu gibi yeniden kullanılabilir kod koyabileceğiniz yer, lib dizinindedir. Bununla birlikte,gibi herhangi bir şeye ihtiyacınız yoktur, çünkü yükleme yolunda zaten vardır ve içeriği başlatma sırasında yüklenecektir.

Varolan bir sınıfı genişletmeniz gerekiyorsa, önce modülünüzü tanımlayın ve genişletmek istediğiniz sınıfa bir mesaj olarak göndererek ekleyin.

module MyExtensions 
    def self.included base 
    base.instance_eval do 
     def my_new_method 
     … 
     end 
    end 
    end 
end 

ActiveRecord::Base.send :include, MyExtensions 
2

Sık sık lib ürününü ekleyeceğim, lib altındaki herhangi bir şeyin yükleme yolunda olduğunu ve require d olması gerekmiyor.

düzenleme: Steve'in yorumundan sonra, dosyalara gerek duymakla ilgili olan bit'i kaldırdınız. - Oraya "kütüphaneler" şeklinde kod ortak bitlerini yer P

+1

bunu bilmiyordum yük yolu –

+0

olduğu gibi lib' 'dosyaları gerektiren gerekmez. Teşekkürler. – rfunduk

2

bu amaçla iyi oturuyor RoR projelerinde lib dizin vardır: Ayrıca, bir çift benim kod bazı gerektirir kaldırıldı. ActiveRecord sınıflarını yeniden kullanılabilir yardımcı yöntemlere genişletme.

İlgili konular