Rails如何自动将ModelHelper加载到Model中

时间:2012-08-15 23:17:24

标签: ruby-on-rails module helpers rails-models

我对Rails如何自动将app / helpers中的模块加载到模型中感兴趣。

即:当app / helpers / widget_helper.rb存在且包含WidgetHelper时,该模块会自动加载到Widget模型中。

我需要一个app中的目录,其中包含任意代码以包含在模型中,并且希望避免必须包含每个单独的模块。我认为嘲笑这个功能会很有用。

1 个答案:

答案 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子目录中的所有文件,并包含该目录中包含的任何名称模型的模块。

显然,您可以将“商品”替换为您想要的任何内容,但这代表了划分代码的一种不错的方式,而无需手动包含您创建的每个模块。