我需要从Rails 3引擎中了解程序员应用程序的名称。
Rails.application.class.parent_name
原始海报要求输入rails应用程序的名称,而不是类名称。那是两件事。例如Rails应用程序的拼写可能与Rails期望的不同,例如'test-app'而不是'test_app'。
很难获得Rails应用程序的名称,就像签到时一样拼写,因为该名称未保留。只有session_store的选项似乎包含稍微修改的原始字符串。
获得Rails应用程序名称的最佳方法是:
即使您的应用程序目录已重命名或符号链接,也可以使用!
Rails.application.config.session_options[:key].sub(/^_/,'').sub(/_session/,'')
=> "test-app"
为什么?因为应用程序的作者可能拼写了name的拼写与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"
这是类名,但是您不能确定如何使用作者的拼写方式来命名。
在Rails 3中,将为生成的应用程序提供与应用程序名称匹配的模块名称空间。因此,如果您的应用程序名为“ Twitter”,则Rails.application的类为“ Twitter :: Application”。
[Rails.application
返回您的MyApp::Application
类。
对于更“人性化”的版本(基于第一个答复,您可以在这里找到),请考虑以下方法:它将为您的Test App
应用程序返回TestApp
。
使用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
您可以在config.ru文件中找到它:
用于Rails 6及更高版本