Ruby on rails 如何将Rails视图助手提取到gem中?
我有一组我经常使用的rails视图帮助程序,并且希望将它们打包成一个gem,这样我就可以在gem文件中放一行,并从我的视图访问这些帮助程序 在使用Bundler和Jeweler之前,我已经创建了gems,但是,我并不完全清楚如何在gem中组织Rails视图帮助程序,并将它们包含到Rails中 如果有任何关于如何为Rails3实现这一点的最新教程的提示或链接,我将不胜感激 谢谢 只是想澄清一下:问题不在于“如何创造宝石”。它是“如何在gem中打包视图帮助程序,以便我可以在Rails中使用它们” 编辑2:Ruby on rails 如何将Rails视图助手提取到gem中?,ruby-on-rails,ruby-on-rails-3,rubygems,gem,actionview,Ruby On Rails,Ruby On Rails 3,Rubygems,Gem,Actionview,我有一组我经常使用的rails视图帮助程序,并且希望将它们打包成一个gem,这样我就可以在gem文件中放一行,并从我的视图访问这些帮助程序 在使用Bundler和Jeweler之前,我已经创建了gems,但是,我并不完全清楚如何在gem中组织Rails视图帮助程序,并将它们包含到Rails中 如果有任何关于如何为Rails3实现这一点的最新教程的提示或链接,我将不胜感激 谢谢 只是想澄清一下:问题不在于“如何创造宝石”。它是“如何在gem中打包视图帮助程序,以便我可以在Rails中使用它们” 编
我也同意下面的海报。。rails引擎对于这种(希望是简单的)需求来说太过苛刻了您可能正在寻找的是一个。引擎是一个包含rails应用程序片段的gem(事实上,rails应用程序本身就是一个引擎)。在我看来,对于这项任务来说,一个完整的应用程序是过分的。相反,您可以创建一个在初始化时将助手包含到ActionView::Base中的
# lib/my_gem/view_helpers.rb
module MyGem
module ViewHelpers
def pre(text)
content_tag :pre, text
end
def another_helper
# super secret stuff
end
end
end
# lib/my_gem/railtie.rb
require 'my_gem/view_helpers'
module MyGem
class Railtie < Rails::Railtie
initializer "my_gem.view_helpers" do
ActiveSupport.on_load(:action_view) { include MyGem::ViewHelpers }
end
end
end
# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails)
#lib/my_gem/view_helpers.rb
模块MyGem
模块查看帮助程序
def pre(文本)
内容标签:前置,文本
结束
def另一个_助手
#超级秘密的东西
结束
结束
结束
#lib/my_gem/railtie.rb
需要“我的宝石/查看工具”
模块MyGem
类Railtie
另外,如果您希望仅包含Rails3版本的帮助程序,则可以使用
# lib/my_gem.rb
require 'my_gem/railtie' if defined?(Rails::Railtie)
谢谢,我要试试这个。。威尔回电嗨,我想知道:为什么它命名为“Railtie”,Railtie是什么意思?@为什么,我不确定,但我认为这是因为它是一个类,有必要将代码“绑定”到“Rails”中。@为什么“Railties”是火车轨道固定的木板条,也就是说,将它们“绑定”在一起。在RoR中命名一个与“rails”主题一致的类似构造只是一种巧妙的方式。@BrandonTilley如果我能提供一个建议,那就是利用内置的load hook功能,而不是在
ActionView::Base
上调用私有方法include
。自年以来,Rails提供了惰性负载挂钩作为ActiveSupport的一部分。因此,初始化程序块的备用代码看起来像ActiveSupport.on_load(:action_view){include MyGem::ViewHelpers}