2012-06-29 14 views
5

Bir uygulamada bulunan bir geminin kodundaki bir uygulamanın Rails dosya sistemi kökü bilgisini bilmek mümkün mü?Bir Gemideki bir Rails uygulamasının kök dizinini nasıl alabilirim

Rails.root 

bir mücevher yazıyoruz diye gelmez: benim kötü İngilizce

Tabii
+0

Sohbet burada konuşmaktan vazgeçilmez. Gönderilerinize "teşekkürler" ifadesini ekleyecekseniz (zaten yapmamalısınız), "thx" değil "teşekkürler" yazın. – meagar

+0

Yakut taşlarla fazla bir şey yapmadım, ama "root_path" işlevi çalışmıyor diye merak ediyorum. –

+0

Dosya sistemi kök dizini? veya URL root_path? –

cevap

7

Buna benzer bir sorunu gidermek için bulduğum çözüm, railtie başlatıcılarını kullanarak modülümü dahil etmektir.

Yani, /lib/mygem/railtie.rb Bu kod ile

module MyGem 
    class Railtie < Rails::Railtie 
    initializer "Include your code in the controller" do 
     ActiveSupport.on_load(:action_controller) do 
     include MyGem 
     end 
    end 
end 

yılında, sizin modül ActionController yüklendikten sonra dahil edilecek ve

Rails.root kullanmak mümkün olacak

Bu iş sizin için uygunsa bana bildirin.

+0

Çalışıyor gibi görünüyor. Çok teşekkürler! – sailor

2

için

module MyGem 
    def self.included(base) 
    puts Rails.root # return nil 
    end 
end 

ActionController::Base.send :include, MyGem 

Teşekkür'ın ve üzgün:

Bu

mücevher kaynağının bir örnek Küresel isim alanına erişemezsin demek. Tek endişe, Geminizin başlatılması sırasında Rails modülü kurulmadan önce bu erişimi kullanmasıdır. Sorunun bu olduğunu bulursanız, kullandığınız kodu ve nerede olduğunu postalayın. Sorunun hatalarını gidermeye yardımcı olmaktan memnuniyet duyarız.

+0

Rails.root sıfır döndürür. – sailor

+0

Bu olmamalı. Belki de daha fazla bağlam - tam bir Rails uygulamasında çalıştırdığınız soruya eklediğiniz örnektir veya RSpec veya benzeri ile test ediyor musunuz? Başlatma sürecinde ne zaman #send diyorsun: include? –

+0

Tam bir Rails uygulamasında çalışıyor. Gem eklendiğinde dahil edilir, kod temelde aynıdır ... – sailor

İlgili konular