这个问题与此问题相反:How to determine table name within a Rails 3 model class。
我的目的是查看Rails项目数据库,并尝试找出项目所涉及的所有可能的模型类。我有一些线索,例如从AR连接获取表名列表等。但是到table_name - >模型类映射。我不知道。
感谢。
答案 0 :(得分:20)
在Rails中调用此方法的方法是#classify(http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-classify)。如果您可以使用Ruby(或Rails本身),请执行以下操作:
"table_name".classify
或实际获得班级名称:
"table_name".classify.constantize
答案 1 :(得分:5)
怎么样:
def index_by_table_name
@index_by_table_name ||= ActiveRecord::Base.descendants.reject(&:abstract_class).index_by(&:table_name)
end
klass = index_by_table_name[table_name]
答案 2 :(得分:1)
检查ruby API http://apidock.com/rails/String/constantize
constantize
方法会将您的字符串转换为常量
由于您的表名称类似于job_applications,您需要将其转换为“JobApplication”,因此请查找受支持的humanize, titleize
或classify
方法。
答案 3 :(得分:0)
更好的方法是反过来,加载所有模型并提取它们的表名。
Rails 6.x / Zeitwerk
# load all clases
Zeitwerk::Loader.eager_load_all
# get all named classes extending ApplicationRecord
all_models = ObjectSpace.each_object(Class).select { |c| c < ApplicationRecord}.select(&:name)
# build the index
model_by_table_name = all_models.index_by(&:table_name)