我需要从Rails 3引擎中知道程序员应用程序的名称。
答案 0 :(得分:117)
Rails.application.class.parent_name
答案 1 :(得分:19)
原始海报要求 rails应用程序的名称,而不是类名。这是两件不同的事情。例如rails应用程序的拼写可能与Rails预期的不同,例如: 'test-app'而不是'test_app'。
很难找到Rails应用程序的名称,因为它已签入,因为该名称未被保留。只有session_store的选项似乎包含稍微修改的原始字符串。
获取Rails应用程序名称的最佳方法是:
即使你的app目录已重命名,或者sym链接,这也会有效!
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> "test-app"
为什么呢?因为该应用的作者可以拼写它的名称与Rails预期的不同...例如用' - '字符代替'_';例如“测试应用程序”。从班级名称来看,你无法保证拼写正确。
使用此信息,您可以这样做:
class << Rails.application
def name
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
end
end
Rails.application.name
=> 'test-app'
或者只是将其添加到您的./config/environment.rb
:
APP_VERSION = '1.0.0'
APP_NAME = Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
使这些常量可以在应用程序的顶层使用。
关闭,但没有雪茄:
这几乎是正确的,但如果重命名应用程序目录(例如在部署期间为“20121001_110512”或“最新”......),它仍会失败,那么以下内容将会中断:
File.basename(Rails.root.to_s)
=> "test-app"
使用以下两种方法无法获得正确的拼写...您只能猜出一个名字:
这是次优的,可能会给出错误拼写的结果:
您可以像这样获得应用程序名称的衍生物:
Rails.application.engine_name.gsub(/_application/,'')
=> "test_app"
但请注意,这不是万无一失的,因为有人可能已经命名了应用程序 “test-app”,你会看到上面的结果,而不是' - '的正确名称。
如果你这样推导出来也是如此:
Rails.application.class.parent_name
=> "TestApp"
这是类名,但你不能确定如何按照作者拼写的方式获取名称。
答案 2 :(得分:15)
在Rails 3中,生成的应用程序被赋予与应用程序名称匹配的模块命名空间。因此,如果您的应用程序被称为“Twitter”,则Rails.application类是“Twitter :: Application”。
这意味着你可以拆分Rails应用程序的类名字符串,以获得这样的应用程序名称:
Rails.application.class.to_s.split("::").first
在我们的示例中,结果字符串将是“Twitter”。
答案 3 :(得分:5)
Rails.application
会返回您的MyApp::Application
课程。
答案 4 :(得分:3)
更多&#34;人性化&#34;版本(基于您在此处可以找到的第一个回复)考虑以下方法:它将为您的Test App
应用返回TestApp
。
def app_name
Rails.application.class.parent_name
.underscore
.humanize
.split
.map(&:capitalize)
.join(' ')
end
答案 5 :(得分:2)
使用Scott的回答,我将以下内容放在我的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
然后在我的模板中,我可以在任何需要的地方#{app_name}
进行操作,如果您需要重命名您的应用程序(我今天早上必须这样做),这样可以减轻麻烦。
答案 6 :(得分:0)
您可以在config.ru文件中找到:
run Dinosaur::Application
或在Rakefile中:
Dinosaur::Application.load_tasks
“::”之前的名称是应用名称
答案 7 :(得分:0)
用于Rails 6及更高版本
Rails.application.class.module_parent.name
更多上下文:
Module#parent
已重命名为module_parent
。 parent
已过时,将在Rails 6.1中删除。