我对Rails如何自动将app / helpers中的模块加载到模型中感兴趣。
即:当app / helpers / widget_helper.rb存在且包含WidgetHelper
时,该模块会自动加载到Widget模型中。
我需要一个app中的目录,其中包含任意代码以包含在模型中,并且希望避免必须包含每个单独的模块。我认为嘲笑这个功能会很有用。
答案 0 :(得分:0)
仍然不确定Helpers是如何加载的,但是我花了一些时间找出一个好方法来实现这一点config.after_initialize call
。
假设您想要一个名为模块且自动加载的ModelGoods的app/goods
目录。将以下代码添加到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
子目录中的所有文件,并包含该目录中包含的任何名称模型的模块。
显然,您可以将“商品”替换为您想要的任何内容,但这代表了划分代码的一种不错的方式,而无需手动包含您创建的每个模块。