Gorm (Golang) 和带有单表继承“类型”列的数据库

sub*_*ris 5 go go-gorm

我正在尝试使用 Go 从作为现有 Rails 应用程序一部分的数据库中读取数据。一些模型和表通过type列使用单表继承。在 Rails/ActiveRecord 中,此列的存在将创建到适当模型的自动映射。如果表是animals并且typeDog,它将映射到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
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我在我的main函数中注册回调:

db.Callback().Query().Before("gorm:query").Register("my_plugin:before_query", scopedSearch)
Run Code Online (Sandbox Code Playgroud)

当我搜索使用的实例db.First或使用的模型时db.Model(&MyModel{}).Where(...),它似乎正在工作。这是处理它的正确方法吗?所有查询方法都会遵守此范围还是有更直接或更彻底的方法?