我对 Rails 如何自动将 app/helpers 中的模块加载到模型中感兴趣。
也就是说:当 app/helpers/widget_helper.rb 存在并包含WidgetHelper
该模块时,该模块会自动加载到 Widget 模型中。
我需要应用程序中的目录,其中包含要包含到模型中的任意代码,并且希望避免必须包含每个单独的模块。我认为模拟这个功能会很有用。
我对 Rails 如何自动将 app/helpers 中的模块加载到模型中感兴趣。
也就是说:当 app/helpers/widget_helper.rb 存在并包含WidgetHelper
该模块时,该模块会自动加载到 Widget 模型中。
我需要应用程序中的目录,其中包含要包含到模型中的任意代码,并且希望避免必须包含每个单独的模块。我认为模拟这个功能会很有用。
仍然不确定 Helpers 是如何加载的,但考虑到 rails ,我花了一些时间找出一个很好的方法来做到这一点config.after_initialize call
。
假设您想要一个app/goods
目录,其中包含自动加载的 ModelGoods 命名模块。将以下代码添加到application.rb
:
config.after_initialize do
Dir["#{Rails.root}/app/goods/*_goods.rb"].each do |file|
name = File.basename(file, ".rb").humanize.titleize.gsub(" ","")
name.gsub("Goods","").constantize.send :include, "Goods::#{name}".constantize
end
end
这将解析app/goods
子目录中的所有文件,并包含该目录中包含的任何命名模型的模块。
显然,您可以将“商品”替换为您想要的任何内容,但这代表了一种划分代码的好方法,而无需手动包含您创建的每个模块。