2015-12-16 8 views
9

Byłem w konsoli poręczy, przypadkiem wpisałem w literze j i nacisnąłem enter i wróciłem nil.Co to jest ta tajemnica "j" w Rails?

rails c 
Loading development environment (Rails 3.2.13) 
[6] pry(main)> j 
=> nil 
[1] pry(main)> j.nil? 
=> true 

Google nigdzie mnie nie dotarło. Ktoś wie, co to jest ta tajemnicza j i jaki jest jej cel? Po prostu ciekawy.

+1

Wiem, że 'j' jest skrótem od' escape_javascript', metody, która pozwala wstawiać cząstki w plikach '.js.erb'. Jeśli wywołasz to bez żadnych parametrów, może zwrócić zero. –

+0

Istnieją również "p" i "y". – roob

+2

@roob - yep, metoda 'y' pochodzi z modułu' YAML', dostęp do niego można uzyskać w czystym rubinku bez żadnych klejnotów po "wymaganiu" yaml''. – BroiSatse

Odpowiedz

12

Można zawsze znaleźć źródło danej metody korzystania source_location:

method(:j).source_location 

lub nawet jego dokładną definicję z pry (lub method_source gem):

method(:j).source 

Wynik:

def j(*objs) 
    objs.each do |obj| 
    puts JSON::generate(obj, :allow_nan => true, :max_nesting => false) 
    end 
    nil 
end 

j jest metodą pochodzącą z biblioteki JSON (która jest dodanie tej metody do modułu Kernel więc jest ona dostępna w IRB) i jest odpowiedzialny za wyświetlanie podane argumenty jako obiekty JSON:

j(hello: :world) 
    #=> {"hello":"world"} 
    nil 

Rails domyślnie wymagają json biblioteki więc jest on dostępny od razu. W czystej IRB musisz mieć do niej dostęp require 'json'.

Przyjmuje dowolną liczbę argumentów, więc j zwraca zero bez drukowania czegokolwiek. Jest to odpowiednik metody p, po prostu używa json zamiast wyniku inspect.

+0

To jest pomocne. Świetna odpowiedź. Ponadto, nie wiedziałem, że mogę to zrobić: 'method (: j) .source'. Dzięki za nauczenie mnie czegoś nowego! –

+1

@RyanRebo - Cóż, normalnie nie możesz, musisz wykonać sesję podważenia lub zażądać gem 'method_source', aby to zrobić. 'lokalizacja_źródłowa' jest jednak dostępna nawet w najbardziej czystej irb. – BroiSatse

+0

@BroiState Ahhh gotchya. Dzięki, dobrze wiedzieć! –