gpt4 book ai didi

ruby-on-rails - 创建一个简单的 Rails 3 文本助手 Gem

转载 作者:行者123 更新时间:2023-12-04 01:52:36 25 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





How do I extract Rails view helpers into a gem?

(3 个回答)


7年前关闭。




我一直在开发我的第一个 Rails 3 插件,以打包一个我喜欢在 ApplicationHelper 中拥有的简单辅助函数。我所有的应用程序。你可以看到整个代码on 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 的功能绑定(bind)到 ActionView。最好让它更通用。

要解决这个问题,您应该将代码打包到它自己的模块中,然后将该模块注入(inject)您的 View 环境。例如,将您的助手放入它自己的模块(和文件)中:

# 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应该只是使功能可访问。

关于ruby-on-rails - 创建一个简单的 Rails 3 文本助手 Gem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6551822/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com