ruby-on-rails - 如何将 Rails 模型文件拆分为多个文件(不是关注点,不是模块,只是单独的文件)?
问题描述
我在单个文件 foo.rb 中定义了一个 Rails 4 模型 Foo
# app/models/foo.rb
class Foo < ActiveRecord::Base
def method1
...
end
def method2
...
end
end
没有任何类型的类重新定义(例如,没有重构以使用特征或关注点),我想简单地将一些代码移动到一个新文件 foo_more.rb
# app/models/foo.rb
require File.expand_path('../foo_more.rb', __FILE__)
class Foo < ActiveRecord::Base
def method1
...
end
end
# app/models/foo_more.rb
class Foo < ActiveRecord::Base
def method2
...
end
end
当我这样做时,使用require,它可以工作,但在更改该文件中的代码后不会在dev't中重新加载。
有没有办法告诉 Rails 在代码更改后重新加载开发中的新文件?
解决方案
require_dependency File.expand_path('../foo_more.rb', __FILE__)
class Foo < ActiveRecord::Base
def method1
...
end
end
# app/models/foo_more.rb
class Foo < ActiveRecord::Base
def method2
...
end
end
require_dependency(file_name, message = "没有要加载的文件 -- %s")
使用机制解释文件并将其定义的常量标记为自动加载。file_name 可以是字符串或响应 to_path。
常见用法:
在绝对需要在该点定义某个常量的代码中使用此方法。一个典型的用例是为不同命名空间中具有相同相对名称的常量确定常量名称解析,否则它们的评估将取决于加载顺序。
在开发驻留在我的 rails 应用程序中的类或模块时,我通常使用 require_dependency,可能在 lib/ 目录中。正常的 require 语句不会重新加载我的更改,因此我在引用我新开发的类或模块的文件中使用 require_dependency。
请注意,您的里程可能会有所不同。有些人在包含新的依赖项时会经历严重的减速。我相信这会在您每次调用Foo.all
,Foo.find(1)
等时重新加载文件。因此,您可能应该只在开发中这样做。
推荐阅读
- scala - 使用不同的工作目录和输入重定向在 Scala 上运行进程
- vba - 查找两个时间戳之间的 DST 时间戳
- javascript - 如何让 JS 文件使用 GSAP 为代码设置动画?
- java - 如何在树莓派上构建 maven 项目
- powershell - 希望通过注册表从资源管理器中删除文件夹
- function - PowerShell 在返回对象时添加项目的 int 索引
- c# - 如何在运行时正确使用可编写脚本的对象来创建项目?
- three.js - 在 GLSL 着色器中更改颜色
- c - fscanf() 不使用 '&' 就无法读取 int 数据类型
- powershell - 使用powershell设置天蓝色函数的blob名称