【发布时间】:2015-11-07 22:39:16
【问题描述】:
rails console 中是否有显示所有导轨模型的方法?
类似这样的:
Models.all
结果如下:
[Customer, Site, Page, Download]
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
rails console 中是否有显示所有导轨模型的方法?
类似这样的:
Models.all
结果如下:
[Customer, Site, Page, Download]
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4
试试这个:
ActiveRecord::Base.subclasses
这将返回一个数组,因此要仅获取模型的名称,您需要运行:
ActiveRecord::Base.subclasses.map(&:name)
【讨论】:
send,#subclasses 是公开的。
send ..这是一个公共方法
ActiveRecord::Basesn-p 有什么缩写吗?每次我需要来自基础层的东西时,我需要使用它吗?
has_and_belongs_to_many 做某事的非模型类。例如,我得到 [User,User::HABTM_Agencies],然后我调用 Agency,然后我得到 [User,User::HABTM_Agencies,Agency,Agency::HABTM_Users]
Dir["#{Rails.root}/app/models/**/*.rb"].each {|f| puts f; require File.basename f}。
只要运行:
Rails.application.eager_load!
ActiveRecord::Base.subclasses
【讨论】:
我尝试了上面的两个答案,它没有按预期工作。我得到了这个结果,
["User", "HABTM_Roles", "ApplicationRecord", "PublicActivity::ORM::ActiveRecord::Activity", "ApplicationRecordGlobal", "HABTM_Users", "UserSync"]
对我有用的是,
Rails.application.eager_load!
ApplicationRecord.subclasses.map(&:name)
【讨论】:
gem 'rails', '~> 5.0.5' 这对我有用。很好的发现!
如果你运行rails c 和-e production,那么
ApplicationRecord.subclasses
ApplicationRecord.subclasses.map(&:name)
如果你在开发中运行rails c,你需要在上面的命令之前运行eager_load
Rails.application.eager_load!
所有模型都继承自 ApplicationRecord 和 ApplicationRecord 继承自 ActiveRecord::Base。
和eager_load! 将加载所有模型,但在开发环境中eager_load 是错误的。你可以在config/environments/development.rb找到这个配置
【讨论】: