Ho bisogno di conoscere il nome di un'applicazione per programmatori da un motore Rails 3.Come si accede al nome dell'oggetto dell'applicazione Rails 3?
risposta
In Rails 3, all'applicazione generata viene assegnato uno spazio dei nomi modulo che corrisponde al nome dell'applicazione. Quindi se la tua applicazione è stata chiamata "Twitter", la classe di Rails.application è "Twitter :: Applicazione".
Questo significa che è possibile dividere la stringa del nome della classe della vostra applicazione Rails per ottenere un nome di un'applicazione come questa:
Rails.application.class.to_s.split("::").first
Nel nostro esempio, la stringa risultante sarebbe "Twitter".
C'è qualcosa di simile che può essere usato nei binari 2.3? – nzifnab
questo è il nome della classe, e non il nome dell'applicazione come è archiviato – Tilo
@tilo Vero, tranne che per il 97% dei casi, questo è abbastanza buono per la maggior parte delle persone che nominano la loro app con attenzione – Scott
Rails.application
restituisce la classe MyApp::Application
.
Utilizzando la risposta di Scott, ho messo il seguente nel mio app/controllers/application_controller.rb
file di
class ApplicationController < ActionController::Base
protect_from_forgery
helper_method :app_name
private
def app_name
Rails.application.class.to_s.split("::").first
end
Poi nei miei modelli posso solo fare #{app_name}
ovunque sia necessario, che lo rende molto meno di una seccatura se avete bisogno di rinominare la app (che dovevo fare stamattina).
Il manifesto originale chiesto il nome della app rotaie, non per il nome della classe. Queste sono due cose diverse. per esempio. l'ortografia dell'app rails può essere diversa da quella attesa da Rails, ad es. 'test-app' invece di 'test_app'.
E 'difficile arrivare alla nome di App Rails farro il modo in cui è stata verificata in, perché quel nome non è conservato. Solo le opzioni per lo session_store sembrano contenere la stringa originale leggermente modificata.
Il modo migliore per arrivare al nome dell'applicazione Rails è:
Ciò funzionerà anche se la vostra cartella app è stato rinominato, o sim-legata!
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> "test-app"
Perché? Perché l'autore dell'app potrebbe aver scritto che è nome in modo diverso rispetto a Rails si aspetta ... ad es. con caratteri '-' invece di '_'; per esempio. "Test-app". Dal nome della classe non è possibile garantire l'ortografia corretta.
Utilizzando queste informazioni, si potrebbe fare questo:
class << Rails.application
def name
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
end
end
Rails.application.name
=> 'test-app'
o semplicemente aggiungere questo alla tua ./config/environment.rb
:
APP_VERSION = '1.0.0'
APP_NAME = Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
che rende queste costanti sul livello superiore dell'app.
Vicino, ma non sigari:
Questo è quasi corretta, ma sarà ancora fallire se la directory dell'applicazione viene rinominato (ad esempio, durante la distribuzione di ' '20121001_110512' o 'ultimo' .. .allora quanto segue si spezzasse:
File.basename(Rails.root.to_s)
=> "test-app"
con i seguenti due approcci non si può arrivare a l'ortografia corretta .. si poteva solo immaginare un nome:
Questo è sub-ottimale, e in grado di dare risultati in modo non corretto di farro:
È possibile arrivare a un derivato del nome dell'applicazione in questo modo:
Rails.application.engine_name.gsub(/_application/,'')
=> "test_app"
Ma per favore nota che questo non è infallibile, perché qualcuno potrebbe aver chiamato l'app "test-app" e vedrai il risultato sopra, non il nome corretto con '-'.
stessa cosa vale se si deriva in questo modo:
Rails.application.class.parent_name
=> "TestApp"
questo è il nome della classe, ma non si può essere sicuri come raggiungere il nome il modo in cui l'autore farro esso.
Penso che dovrebbe essere 'Rails.application.class.parent_name' nell'ultima sezione ma non posso modificarlo perché la mia modifica è inferiore a 6 caratteri. Grazie StackOverflow. –
grazie per avermelo fatto notare! L'ho riparato. – Tilo
Questa è la risposta corretta di Rails-y. Vorrei anche notare che la maggior parte degli utenti vorrebbe chiamare .humanize.titleize su questo per l'uso in una vista. – Sam
È possibile trovare questo nel file config.ru:
run Dinosaur::Application
o nel Rakefile:
Dinosaur::Application.load_tasks
Il nome prima della "::" è il nome dell'app
Per una versione più "umanizzata" (basata sulla prima risposta che puoi trovare qui), considera il seguente metodo: restituirà Test App
per l'applicazione TestApp
.
def app_name
Rails.application.class.parent_name
.underscore
.humanize
.split
.map(&:capitalize)
.join(' ')
end
- 1. Come si indirizza un'azione al controller dell'applicazione in Rails 3?
- 2. Come si accede rapidamente alla documentazione di ruby e rails quando si utilizza vim?
- 3. Rails 3 URL senza nome controller
- 4. Come si accede al controller di visualizzazione di un super?
- 5. Come si accede al DisplayNameFor in un modello nidificato
- 6. Rails 3: Come funziona "accept_nested_attributes_for"?
- 7. come personalizzare Rails 3 STI nome della colonna
- 8. Rails 3: Come riassumere record
- 9. Rails 3 SSL Deprecation
- 10. LEFT OUTER si unisce in Rails 3
- 11. Grails che accede al server TCP H2 si blocca
- 12. Rails 3 fields_for - l'ordinamento si perde
- 13. Come si accede alle informazioni di errore del database quando si utilizzano Rails e Postgres
- 14. più convalide Rails 3 (Rails per Zombies; 2: 3)
- 15. Come si accede al valore di una query SQL count() in un programma Java
- 16. Rails 3 - Come si crea un nuovo record da link_to
- 17. Come si ritaglia un'area specifica con graffetta in Rails (3)?
- 18. Rails 3: instradare una risorsa a un altro nome
- 19. Come si accede a ARGV in Mathematica?
- 20. Come si accede a Firebug da un'estensione?
- 21. Come si accede alle API NFL?
- 22. Contattaci funzionalità in Rails 3
- 23. iframe che accede al DOM padre?
- 24. Come si accede a rails_env dal comando Cap deploy?
- 25. Rails 3: .build metodo
- 26. Rails 3: validazione form_tag
- 27. ActionMailer 3 senza Rails
- 28. Rails 3 su dreamhost?
- 29. Swift che accede al dizionario EXIF
- 30. Rails 3 find_or_create_by
vuoi arrivare al nome dell'applicazione come lo hai creato quando hai fatto un "rails new your-application", o solo il nome della classe? – Tilo