我正在尝试使用Go从已经存在的Rails应用程序中的数据库中读取数据。一些模型和表因此通过type
列使用单个表继承。在Rails / ActiveRecord中,此列的存在将创建到适当模型的自动映射。如果表是animals
,而type
是Dog
,它将映射到Dog
类;如果是Cat
,它将映射到Cat
类。我想在Gorm中设置类似的内容。
由于Gorm似乎没有为模型提供default_scope
选项,因此我使用了新的回调。
func scopedSearch(scope *gorm.Scope) {
tablename := scope.TableName()
switch tablename {
case "table_using_sti":
scope.Search.Where("type = ?", "MyModelName")
default:
return
}
}
然后我在main
函数中注册回调:
db.Callback().Query().Before("gorm:query").Register("my_plugin:before_query", scopedSearch)
当我使用db.First
搜索实例或使用db.Model(&MyModel{}).Where(...)
搜索模型时,它似乎正在工作。这是正确的处理方式吗?所有查询方法都将遵守该范围吗?还是更直接或更彻底的东西?