创建一个简单的Rails 3文本辅助工具 Gem[英] Create a simple Rails 3 text helper Gem

本文是小编为大家收集整理的关于创建一个简单的Rails 3文本辅助工具 Gem的处理方法,想解了创建一个简单的Rails 3文本辅助工具 Gem的问题怎么解决?创建一个简单的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 指南,但那里提供的添加助手的方法不起作用,否则我错过了一些东西.

我的问题是:以上面的代码作为我正在寻找的功能的示例,您如何将其变成 Rails 3 插件 Gem?

谢谢!

推荐答案

您所做的问题是您已将 gem 的功能绑定到 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

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

一般来说,您的项目的核心应该在 lib/<project_name>/*.rb 中,而 lib/<project_name>.rb 应该只是让功能可访问.

本文地址:https://www.itbaoku.cn/post/786418.html