2012-02-18 22 views
22

Denetleyicimde dizin eyleminde kullanmaya çalıştığım bir sınıfa sahibim. BuRails uygulamasında dünya çapında kullanılabilir hale getirmek için özel sınıflar nereye koyabilir?

class PagesController < ApplicationController 
    def index 
    @front_page = FrontPage.new 
    end 
end 

FrontPage Ben tanımladığınız bir sınıftır gibi

bunu basitleştirmek için, görünüyor. Bunu eklemek için,/lib/klasörüne yerleştirdim. Ben, require 'FrontPage', require 'FrontPage.rb', require 'front_page' teşebbüs ve de başa yolun olanların her ettik mesela require_relative '../../lib/FrontPage.rb' Ben aşağıdaki mesajlardan birini almaya devam

: Ben bu dosyayı koyacağım cannot load such file -- /Users/josh/src/ruby/rails/HNReader/lib/front_page veya uninitialized constant PagesController::FrontPage

/nasıl Bir nesneyi oluşturabilmem için onu bir denetleyiciye ekleyebilir miyim?

Bu Ruby 1.9.2 Raylar 3.1.3 olduğunu OS X Lion

+3

'front_page' gerektiren 'denediniz mi? – Mischa

+0

@Mischa Evet, tüm bu argümanlar gerektirir tırnak içine alınmalıdır. Bunu işaret ettiğin için teşekkürler. '' '' '' Need' işlevinin kullanılması hata '' bu dosyayı yükleyemiyor - front_page' –

cevap

4
Biz sadece dosyasını yüklemek gerekir

,

class PagesController < ApplicationController 
    require 'front_page.rb' 
    def index 
    @front_page = FrontPage.new 
    end 
end 

lib/front_page.rb

class FrontPage 
end 

Bu dosyaları için autoload olarak ayarlayabiliriz bu dosyaları

# Custom directories with classes and modules you want to be autoloadable. 
# config.autoload_paths += %W(#{config.root}/extras) 

İkinci seçenek tercih edilen bir çözüm olabilir.

+0

Evet, bunu denedim. Bunu sınıf tanımının dışına koydum, ama şimdi kontrol ederek, sınıf tanımının içine koyup vermeme yine de 'böyle bir dosya yükleyemiyor' - front_page.rb' –

7

Dosya adı FrontPage.rb. Adın 'front_page.rb' olarak değiştirilmesi, ancak sınıf adını 'FrontPage' olarak bırakmak sorunu çözdü.

+3

Sözleşme, Java'ya özgü değil. http://en.wikipedia.org/wiki/CamelCase – 0112

23

front_page.rb yük yolunuza bir yere yerleştiriyorsanız, require 'front_page' kullanabilmeniz gerekir. Yani: Bu gerektiği eser:

require 'front_page' 
class PagesController < ApplicationController 
    def index 
    @front_page = FrontPage.new 
    end 
end 

Yükleme yolunu kontrol etmek için, bu deneyin:

$ rails console 
ree-1.8.7-2011.03 :001 > puts $: 
/Users/scottwb/src/my_app/lib 
/Users/scottwb/src/my_app/vendor 
/Users/scottwb/src/my_app/app/controllers 
/Users/scottwb/src/my_app/app/helpers 
/Users/scottwb/src/my_app/app/mailers 
/Users/scottwb/src/my_app/app/models 
/Users/scottwb/src/my_app/app/stylesheets 
# ...truncated... 

Bu örnekte görebilirsiniz ilk satırı projenin lib dizin vardır front_page.rb yaşamanı söyledin.

Yapabileceğiniz başka şey config/application.rb bu ekleyin:

bile require gerekmez öyle yapmalıdır
config.autoload_paths += %W(#{config.root}/lib) 

; bunun yerine Rails daha sonra otomatik olarak yükleyecektir (ve lib dir'inizdeki diğer her şey, bu yüzden dikkatli olun).

+0

autoloading, – Donato

+0

numaralı anahtardır, teşekkürler: soru: lib dizinindeki her şeyi * otomatik olarak yüklemek tehlikeli veya riskli midir? – BKSpurgeon

İlgili konular