Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails rails模型文件路径_Ruby On Rails_Ruby - Fatal编程技术网

Ruby on rails rails模型文件路径

Ruby on rails rails模型文件路径,ruby-on-rails,ruby,Ruby On Rails,Ruby,如何在rails中获取模型文件路径?我想要这样的东西: MyModel.file_path 预期结果:“/app/models/my_model.rb” 这可以在rails中完成,或者我需要从models name创建文件名并在models目录中找到它?我认为您必须构建它,但这相当简单 下面是: def model_path model_file = self.class.name.split("::").map {|c| c.downcase }.join('/') + '.rb'

如何在rails中获取模型文件路径?我想要这样的东西:

MyModel.file_path
预期结果:“/app/models/my_model.rb”


这可以在rails中完成,或者我需要从models name创建文件名并在models目录中找到它?

我认为您必须构建它,但这相当简单

下面是:

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

您可以使用
\uuuuuuuuuuuuuuuuuuuu
引用当前文件路径:

def self.file_path
  File.expand_path(__FILE__)
end

请注意,Ruby版本对
\uuu文件返回的内容很重要。请参阅。

[从部分问题改编为更一般的问题]

在一个简单的Rails应用程序中,应用程序的模型类在其
app/models
目录中定义,文件路径可以从类名中确定派生。检索此路径的方法可以在特定的模型类
MyModel
中定义,如下所示:

classmymodel
def self.file_路径
join('app','models',“#{klass.name.下划线}.rb”)。到
结束
结束
例如,这个特定的模型类
MyModel
将在
APP_ROOT/APP/models/my_model.rb
中定义,其中
APP_ROOT
是应用程序的根目录路径

泛化这一点,可以在所有模型类中定义这种方法,并考虑简单的Rails路径配置的扩展。在定义模型定义自定义路径的Rails应用程序中,必须考虑所有这些路径。而且,由于任意模型类可以在由应用程序加载的任何Rails引擎中定义,所以必须还要查看所有加载的引擎,并考虑它们的自定义路径

模块活动记录
阶级基础
def self.file_路径
候选项=Rails.application.config.path['app/models'].map do | model_root|
join(model_root,“#{name.下划线}.rb”)。到
结束
候选项+=Rails::Engine::Railties.engines.flat|map do|Engine|
engine.path['app/models'].map do | model_root|
join(model_root,“#{name.下划线}.rb”)。到
结束
结束
candidates.find{| path | File.exist?(path)}
结束
结束
结束

为了让Rails应用这个猴子补丁,
需要在
config/initializers/active\u record.rb中使用它

是的,我知道这种方法,但我希望它已经在子文件夹中的railsWorks中实现,除非您定义自己的加载路径,而不使用正常的类名称空间文件夹结构。
def self.file_path
  __FILE__
end