创建一个简单的Rails 3文本助手Gem

我一直在研究我的第一个Rails 3插件,打包一个简单的帮助函数,我喜欢在我的所有应用程序的ApplicationHelper中使用它。 你可以在Github上看到整个代码。

这是我的第一次尝试:

 ## lib/semantic_id.rb ## require 'semantic_id/version' module ::ActionView::Helpers::TextHelper def semantic_id string = String.new case when controller.action_name =~ /new|edit/ string += controller.action_name + "_" when controller.action_name =~ /index|create/ string += controller.controller_name else string += controller.controller_name.singularize end string += "_view" end end 

现在,这是有效的,但据我所知,这不是扩展ActiveSupport或任何其他Rails模块的’Rails 3方式’。 我还没有找到关于你如何“应该”构建Rails 3 gem的文档。 我尝试按照Rails指南进行操作,但是在那里添加帮助程序的方法不起作用,否则我错过了一些东西。

我的问题是:鉴于上面的代码作为我正在寻找的function的一个例子,你将如何把它变成一个Rails 3插件Gem?

谢谢!

你已经完成的问题是你已经将gem的function绑定到ActionView。 最好让它更通用。

要解决此问题,您应该将代码打包在自己的模块中,然后将该模块注入到视图环境中。 例如,将您的助手放入其自己的模块(和文件)中:

 # lib/semantic_id/helper.rb module SemanticId module Helper def semantic_id ... end end end 

然后使用Railtie将其添加到ActionView:

 # lib/semantic_id.rb require 'semantic_id/helper' ActiveSupport.on_load(:action_view) do include SemanticId::Helper end 

您希望将帮助程序的function部分与将其插入框架的部分分开。 您的方法包含一些特定于Rails的代码,但如果没有,这种技术将允许您将它与Sinatra和其他框架一起使用。

通常,项目的内容应该在lib//*.rb lib/.rb ,而lib/.rb应该只是使function可访问。