我有我的 Rails 5 ApplicationRecord
:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
end
和一堆继承自ApplicationRecord
. 现在,我希望每个模型名称以自定义方式映射到其数据库表。例如,我可以这样做:
class MyModel < ApplicationRecord
self.table_name = 'MY_MODELS' # overrides default 'my_models'
end
但由于所有映射都是可预测的,我想我会在基类中这样做:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def self.table_name
self.name.underscore.pluralize.upcase
end
end
...但这不起作用,即使从技术上讲,类方法应该由子类继承。(知道为什么吗?)
我还尝试添加一个执行以下操作的方法:
class ApplicationRecord < ActiveRecord::Base
self.abstract_class = true
def self.inherited(subclass)
subclass.table_name = subclass.name.underscore.pluralize.upcase
end
end
这也不起作用。知道最好的方法吗?