Jug*_*ang 9 activerecord ruby-on-rails
这个问题与此问题相反:如何在Rails 3模型类中确定表名.
我的目的是查看Rails项目数据库,并尝试找出项目所涉及的所有可能的模型类.我有一些线索,比如从AR连接获取表名列表等.但是到table_name - >模型类映射.我不知道.
谢谢.
Aus*_*Lin 22
在Rails中调用此方法的方法是#classify(http://api.rubyonrails.org/classes/ActiveSupport/Inflector.html#method-i-classify).如果您可以使用Ruby(或Rails本身),请执行以下操作:
"table_name".classify
Run Code Online (Sandbox Code Playgroud)
或实际获得类名:
"table_name".classify.constantize
Run Code Online (Sandbox Code Playgroud)
更好的方法是反其道而行之,加载所有模型并提取它们的表名称。
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)
Run Code Online (Sandbox Code Playgroud)
小智 7
怎么样:
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]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6464 次 |
| 最近记录: |