如何在导轨中获取模型文件路径?我想这样的事情:导轨模型文件路径
MyModel.file_path
预期的结果:“/app/models/my_model.rb
有可能在轨道做或者我需要从模型名创建文件名,发现它在车型?目录
如何在导轨中获取模型文件路径?我想这样的事情:导轨模型文件路径
MyModel.file_path
预期的结果:“/app/models/my_model.rb
有可能在轨道做或者我需要从模型名创建文件名,发现它在车型?目录
我认为你必须建立它,但相当简单
这老话:
def model_path
model_file = self.class.name.split("::").map {|c| c.downcase }.join('/') + '.rb'
path = Rails.root.join('app/models/').join(model_file)
end
您可以使用__FILE__
来指代当前文件路径:
def self.file_path
File.expand_path(__FILE__)
end
或
def self.file_path
__FILE__
end
注意什么__FILE__
回到了Ruby版本的问题。请参阅What does __FILE__ mean in Ruby?。
[改编自this answer部分到更一般的问题]
在一个简单的Rails应用程序,应用程序的模型类其app/models
目录中定义,条件是可以确定性地从类名来导出的文件路径。检索此路径的方法,可以在一个特定的模型类MyModel
来定义像这样:
class MyModel
def self.file_path
Rails.root.join('app', 'models', "#{klass.name.underscore}.rb").to_s
end
end
例如,这个特定的模型类MyModel
将在APP_ROOT/app/models/my_model.rb
,其中APP_ROOT
是应用程序的根目录路径来定义。
为了概括这一点,可以在所有模型类中定义这样的方法,并考虑简单Rails路径配置的扩展。在为模型定义定义自定义路径的Rails应用程序中,必须考虑所有这些。另外,由于可以在应用程序加载的任何Rails引擎中定义任意模型类,所以还必须考虑所有加载的引擎,并考虑到它们的自定义路径。以下代码结合了这些考虑因素。
module ActiveRecord
class Base
def self.file_path
candidates = Rails.application.config.paths['app/models'].map do |model_root|
Rails.root.join(model_root, "#{name.underscore}.rb").to_s
end
candidates += Rails::Engine::Railties.engines.flat_map do |engine|
engine.paths['app/models'].map do |model_root|
engine.root.join(model_root, "#{name.underscore}.rb").to_s
end
end
candidates.find { |path| File.exist?(path) }
end
end
end
为了让Rails的应用此猴补丁,require
它config/initializers/active_record.rb
。
这是否适用于子文件夹内的模型? – 2013-08-26 14:39:28
是的,我知道这种方式,但我希望它已经实施了轨道 – maki
@LeviStanley,现在它应该工作。 –