Rails控制台显示所有模型

23 浏览
0 Comments

Rails控制台显示所有模型

rails console中有没有一种方法可以显示所有的rails模型?

类似于这样:

Models.all

结果是这样的:

[Customer, Site, Page, Download]

0
0 Comments

在Rails控制台上运行命令"Rails.application.eager_load!"和"ActiveRecord::Base.subclasses"可以显示所有的模型。

问题的出现原因是在Rails控制台中默认情况下,只会加载当前使用的模型,而不会加载其他模型。因此,如果想要在控制台中显示所有的模型,需要手动执行上述两条命令。

解决方法是在控制台中依次运行"Rails.application.eager_load!"和"ActiveRecord::Base.subclasses"两条命令。第一条命令用于加载所有的模型,第二条命令用于显示所有模型的列表。

以下是解决问题的代码示例:

Rails.application.eager_load!
ActiveRecord::Base.subclasses

通过执行以上代码,可以在Rails控制台中显示出所有的模型。

0
0 Comments

问题的出现原因是原来的解决方法适用于较旧版本的Rails,但不适用于当前版本(Rails 5.0.5)。这导致在Rails控制台中无法正确显示所有的模型。

解决方法是使用Rails.application.eager_load!来加载所有模型,并使用ApplicationRecord.subclasses.map(&:name)来获取所有模型的名称。

以下是完整的解决方案:

Rails.application.eager_load!
ApplicationRecord.subclasses.map(&:name)

通过执行以上代码,我们可以在Rails控制台中正确显示所有模型。这适用于Rails 5.0.5版本。

0
0 Comments

问题的出现原因:

问题是出现在Rails控制台中,想要显示所有的模型。尝试使用ActiveRecord::Base.subclasses的方法来获取所有的模型,但是发现有一些模型没有被包括在内。这是因为subclasses方法只能返回已经被加载的模型,而在开发环境中,模型是按需加载的,所以只能获取到部分已加载的模型。

解决方法:

为了解决这个问题,可以在运行subclasses方法之前,先加载所有的模型文件。可以使用以下代码来实现:

Dir["#{Rails.root}/app/models/**/*.rb"].each {|f| puts f; require File.basename f}

这段代码会找到所有的模型文件,并且加载它们。然后再运行subclasses方法,就能够获取到所有的模型了。

另外,在一个类似的问题的回答中找到了更好的解决方法,适用于Rails 3到6版本。具体方法可以参考这个回答:stackoverflow.com/a/10712838/3577922 注意,这个回答在Rails 5及以上版本可能不适用(问题标记为Rails 4)。

0