如何从.gemspec中获取私有Gem名称并在视图中输出
从Gemspec获取Gem名称并在视图中使用
步骤1:在Gem代码中加载Gemspec并暴露名称
你可以在Gem的初始化文件或引擎类中读取gemspec,将名称存为可访问的常量或方法:- 若为普通Ruby Gem,在
lib/your_gem.rb中添加:spec = Gem::Specification.load(File.expand_path("../your_gem.gemspec", __FILE__)) GEM_NAME = spec.name - 若为Rails引擎,在引擎类中添加方法:
module YourGem class Engine < Rails::Engine isolate_namespace YourGem def self.gem_name @gem_name ||= Gem::Specification.load(File.expand_path("../../your_gem.gemspec", __FILE__)).name end end end
- 若为普通Ruby Gem,在
步骤2:在视图布局中调用名称
直接在ERB布局的body标签中使用:- 用常量的方式:
<body class="<%= GEM_NAME %>"> <!-- 布局内容 --> </body> - 用引擎方法的方式:
<body class="<%= YourGem::Engine.gem_name %>"> <!-- 布局内容 --> </body>
- 用常量的方式:
可选:通过Helper简化调用
在Gem的helper文件(如app/helpers/your_gem/application_helper.rb)中添加:module YourGem::ApplicationHelper def gem_name YourGem::Engine.gem_name end end之后视图里可直接用:
<body class="<%= gem_name %>"> </body>
注意:调整
File.expand_path的路径参数,确保能正确定位到你的gemspec文件,路径需匹配Gem的目录结构。
内容的提问来源于stack exchange,提问作者rctneil
相关产品推荐
相关产品推荐

