Potrzebuję znać nazwę aplikacji programistów z silnika Rails 3.Jak uzyskać dostęp do nazwy obiektu aplikacji Rails 3?
Odpowiedz
W Rails 3 wygenerowana aplikacja otrzymuje przestrzeń nazw modułu pasującą do nazwy aplikacji. Więc jeśli twoja aplikacja nazywała się "Twitter", klasa Rails.application to "Twitter :: Aplikacja".
To oznacza, że można podzielić ciąg nazwy klasy aplikacji Rails, aby uzyskać nazwę aplikacji tak:
Rails.application.class.to_s.split("::").first
W naszym przykładzie, otrzymany ciąg byłoby „Twitter”.
Czy jest coś podobnego, co można zastosować w szynach 2.3? – nzifnab
To jest nazwa klasy, a nie nazwa aplikacji, ponieważ jest ona rejestrowana. – Tilo
@tilo True, z wyjątkiem tego, że w 97% przypadków jest to wystarczająco dobre dla większości osób, które starannie nazywają swoją aplikację – Scott
Rails.application
zwraca twoją klasę MyApp::Application
.
Korzystanie odpowiedź Scotta, umieścić następujące w moim pliku app/controllers/application_controller.rb
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :app_name
private
def app_name
Rails.application.class.to_s.split("::").first
end
Następnie w moich szablonów mogę po prostu zrobić #{app_name}
gdziekolwiek jest to potrzebne, co czyni go znacznie mniej kłopotów, jeśli chcesz zmienić nazwę aplikacja (którą musiałem zrobić dziś rano).
Oryginalny plakat poprosił o nazwę aplikacji szyn, nie do nazwy klasy. To są dwie różne rzeczy. na przykład pisownia aplikacji szyny może się różnić od oczekiwanej przez Railsy, np. "testowa aplikacja" zamiast "test_app".
Trudno jest uzyskać nazwę nazwy aplikacji Railsa zapisanej w sposób, w jaki została ona wpisana, ponieważ ta nazwa nie jest zachowywana. Tylko opcje dla session_store wydają się zawierać oryginalny nieznacznie zmodyfikowany ciąg.
Najlepszym sposobem, aby dostać się do nazwy aplikacji Rails jest:
To będzie działać, nawet jeśli katalog aplikacja została zmieniona lub sym-linked!
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> "test-app"
Dlaczego? Ponieważ autor aplikacji mógł mieć inną nazwę niż nazwa niż Rails oczekuje ... ze znakami "-" zamiast "_"; na przykład "testowa aplikacja". Z nazwy klasy nie można zagwarantować prawidłowej pisowni.
Używając tej informacji, można to zrobić:
class << Rails.application
def name
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
end
end
Rails.application.name
=> 'test-app'
lub po prostu dodać to do Twojego ./config/environment.rb
:
APP_VERSION = '1.0.0'
APP_NAME = Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
sprawia, że te stałe dostępne na najwyższym poziomie aplikacji.
Blisko, ale nie cygar:
To prawie poprawne, ale to nadal nie powieść, jeśli zostanie przemianowany katalogu aplikacji (na przykład podczas wdrażania do „«20121001_110512»lub«najnowsze».. .Następnie dodaje się złamie:
File.basename(Rails.root.to_s)
=> "test-app"
z następujących dwóch podejść nie można dostać się do poprawnej pisowni .. można się tylko domyślać nazwę:
To jest nieoptymalne, i może dać błędnie pisane wyniki:
można dostać się do pochodnej nazwą aplikacji, takich jak ten:
Rails.application.engine_name.gsub(/_application/,'')
=> "test_app"
Należy jednak pamiętać, że nie jest to głupie, ponieważ ktoś mógł nazwać aplikację "test-app" na , a zobaczysz wynik powyżej, a nie poprawną nazwę za pomocą "-".
samo jest, jeśli czerpać to tak:
Rails.application.class.parent_name
=> "TestApp"
to nazwa klasy, ale nie możesz być pewien, w jaki sposób dostać się do nazwy drogę autor orkisz go.
Myślę, że powinno to być 'Rails.application.class.parent_name' w ostatniej sekcji, ale nie mogę go edytować, ponieważ moja zmiana jest mniejsza niż 6 znaków. Dzięki StackOverflow. –
dziękuję za wskazanie tego! Naprawiłem to. – Tilo
To jest poprawna odpowiedź Rails-y. Chciałbym również zauważyć, że większość użytkowników chciałaby wywołać funkcję .humanize.titleize w celu użycia w widoku. – Sam
ten można znaleźć w pliku config.ru:
run Dinosaur::Application
lub w Rakefile:
Dinosaur::Application.load_tasks
Nazwa poprzedzające "::" to nazwa aplikacji
Aby uzyskać bardziej "humanizowaną" wersję (na podstawie pierwszej odpowiedzi znajdującej się tutaj) rozważ następującą metodę: zwróci ona Test App
dla twojej aplikacji TestApp
.
def app_name
Rails.application.class.parent_name
.underscore
.humanize
.split
.map(&:capitalize)
.join(' ')
end
- 1. Jak uzyskać dostęp do pomocnika route_path w modelu Rails 3?
- 2. Jak uzyskać dostęp do typu obiektu węglowego?
- 3. Jak uzyskać dostęp do aplikacji?
- 4. Slim 3: jak uzyskać dostęp do ustawień?
- 5. Jak uzyskać dostęp do systemu plików z EJB 3?
- 6. Jak uzyskać dostęp do obiektu żądania od RazorViewEngine?
- 7. Jak udostępnić trasy z silnika Rails 3 do aplikacji hosta?
- 8. Jak uzyskać aktualną metodę w Rails 3?
- 9. Passport.js: jak uzyskać dostęp do obiektu użytkownika po uwierzytelnieniu?
- 10. Szukam aplikacji forum Rails 3
- 11. Jak uzyskać dostęp do sesji z testu integracji Rails?
- 12. Jak programowo uzyskać dostęp do nazwy testu NUnit?
- 13. Czy możesz programowo uzyskać dostęp do bieżącego identyfikatora/nazwy Heroku?
- 14. jak uzyskać dostęp do tablicy [3..last] (ruby)
- 15. Jak uzyskać bezwzględną ścieżkę zasobu w Rails 3?
- 16. Jak uzyskać dostęp do prototypu obiektu w javascript?
- 17. Jak uzyskać dostęp do obiektu ejs w pliku express.js
- 18. Jak uzyskać dostęp do elementu zewnętrznego z literału obiektu zagnieżdżonego?
- 19. Jak uzyskać dostęp do obiektu etykiety osi w matplotlib?
- 20. jak uzyskać dostęp do obiektu ModelAndView na stronie jsp.
- 21. Swift: Jak uzyskać dostęp do obiektu odtwarzacza pełnoekranowego wideo HTML?
- 22. Jak uzyskać dostęp do obiektu zdarzenia jQuery w zwrotnego Seaside
- 23. Jak uzyskać dostęp do obiektu użytkownika w kontrolerze Grails
- 24. Jak uzyskać dostęp do gniazd obiektu S4 w R
- 25. jak uzyskać dostęp do obiektu okna nadrzędnego za pomocą jquery?
- 26. Jak uzyskać dostęp do tablic wewnątrz obiektu za pomocą JNI?
- 27. Jak uzyskać dostęp do właściwości indeksowanej obiektu COM z Powershell
- 28. Jak uzyskać dostęp do formantu wewnątrz obiektu XAML DataTemplate?
- 29. Jak uzyskać dostęp do właściwości obiektu wewnątrz funkcji zdarzenia jQuery
- 30. Jak uzyskać dostęp do obiektu za pomocą klucza dynamicznego?
Czy chcesz uzyskać nazwę aplikacji, w jaki sposób ją utworzyłeś, gdy wykonałeś "nową szynę aplikacji" lub po prostu nazwę klasy? – Tilo