如何将Rails模型文件拆分成多个文件(不关心,不是模块,只是单独的文件)?

问题描述 投票:1回答:1

我在一个文件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,它工作但是在更改到该文件中的代码后不会重新加载。

有没有办法告诉Rails在代码更改后重新加载开发中的新文件?

ruby-on-rails
1个回答
1
投票
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 / dir中。普通的require语句不会重新加载我的更改,所以我在引用我新开发的类或模块的文件中使用require_dependency。

Source

应该注意,您的里程可能会有所不同。包含新的依赖关系时,有些人经历了重大的减速。我相信这会在你每次调用Foo.allFoo.find(1)等时重新加载文件。所以,你应该只在开发中这样做。

© www.soinside.com 2019 - 2024. All rights reserved.