Jeśli wpiszesz script/console
w projekcie Rails i wprowadź $:
, dostaniesz tablicę obejmuje wszystkie katalogi potrzebne do załadowania Rubiego. Zabranie tego małego ćwiczenia polega na tym, że $:
jest tablicą. W związku z tym można na nim wykonywać funkcje, takie jak tworzenie innych katalogów za pomocą metody unshift
lub operatora <<
. Jak sugerujesz w swoim oświadczeniu $:
i $LOAD_PATH
są takie same.
Wadą w tym szybkim i brudnym sposobie, o którym wspomniałeś, jest to, że: jeśli już posiadasz katalog w ścieżce rozruchowej, to się powtórzy.
Przykład:
Mam plugin utworzonego nazwie todo. Mój katalog jest skonstruowany w taki sposób:
/---vendor
|
|---/plugins
|
|---/todo
|
|---/lib
|
|---/app
|
|---/models
|---/controllers
|
|---/rails
|
|---init.rb
W pliku init.rb wszedłem następujący kod:
## In vendor/plugins/todo/rails/init.rb
%w{ models controllers models }.each do |dir|
path = File.expand_path(File.join(File.dirname(__FILE__), '../lib', 'app', dir))
$LOAD_PATH << path
ActiveSupport::Dependencies.load_paths << path
ActiveSupport::Dependencies.load_once_paths.delete(path)
end
zauważyć, jak mówię blok kodu do wykonywania czynności wewnątrz bloku do strun "modele", "kontrolery" i "modele", w których powtarzam "modele". (FYI, %w{ ... }
to kolejny sposób, aby powiedzieć Ruby, aby trzymał tablicę łańcuchów). Kiedy uruchamiam script/console
, I wpisz:
>> puts $:
I wpisać to tak, że łatwiej jest odczytać zawartość w ciągu. Wyjście pojawia się:
...
...
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/models
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/controllers
./Users/Me/mySites/myRailsApp/vendor/plugins/todo/lib/app/models
Jak widać, choć jest to tak proste, przykładem może utworzyć podczas korzystania projekt Obecnie pracuję dalej, jeśli nie jesteś ostrożny szybki i brudny sposób doprowadzi do powtarzających się ścieżek. Dłuższy sposób sprawdzi powtarzające się ścieżki i upewni się, że nie występują.
Jeśli jesteś doświadczonym programistą Rails, prawdopodobnie masz bardzo dobry pomysł, co robisz i prawdopodobnie nie popełnia błąd powtarzając ścieżek. Jeśli jesteś nowicjuszem, wybrałbym dłuższą drogę, dopóki nie zrozumiesz, co naprawdę robisz.
A ** ** nieco mniej gadatliwy wersja gadatliwym jeden jest. 'File.expand_path (File.dirname (__ __ FILE)) {dotknij | pwd | $ LOAD_PATH.unshift (PWD), chyba $ LOAD_PATH.include? (PWD)} ' –
jak o klauzuli "o ile"? Jak oba powyższe mogą być równoważne? – inger
Jako ktoś, kto przyszedł tutaj, aby spróbować zrozumieć, jak tego użyć, jest to bardzo tajemnicze. Nie widzę, skąd nazwa katalogu pochodzi z przykładów. Byłbym wdzięczny, gdyby ktoś mógł to wyjaśnić. – SlySherZ