Vapor 2,Fluent 模型子类

Vapor 2, Fluent model subclass

我正在使用 Vapor 2 并尝试创建非最终模型以对其进行子类化。可能吗?我有以下抽象模型代码:

class MongoObject: Model, JSONRepresentable {

    let storage = Storage()

    let creationDate: Date

    init() {
        creationDate = Date()
    }

    required init(row: Row) throws {
        creationDate = try row.get(KeyPath.creationDate)
    }

    func makeRow() throws -> Row {
        var row = Row()
        try row.set(KeyPath.creationDate, creationDate)
        return row
    }

    func makeJSON() throws -> JSON {
        var json = JSON()
        try json.set(KeyPath.id, id)
        try json.set(KeyPath.creationDate, creationDate)
        return json
    }

}

extension MongoObject: Preparation {

    class func prepare(model: Creator) { }

    static func prepare(_ database: Database) throws {
        try database.create(self) { (builder) in
            builder.id()
            builder.date(KeyPath.creationDate)
            prepare(model: builder)
        }
    }

    static func revert(_ database: Database) throws {
        try database.delete(self)
    }

}

但出现编译错误:

method 'make(for:)' in non-final class 'MongoObject' must return Self to conform to protocol 'Parameterizable'

您的带有子类的非最终 "abstract" 模型符合 Parameterizable 作为 Model 一致性的一部分。可参数化需要 returning Self。默认情况下,这是通过从路径组件中读取实体的 id 来实现的。您现在遇到的问题是编译器无法 return Self 子类,因为它是在更高模型上实现的。

解决方案非常简单,您不能在此处进行子类化。

我可能来不及了,但我遇到了完全相同的问题,我所要做的就是完成 class 决赛。

method 'make(for:)' in non-final class 'MongoObject' must return Self to conform to protocol 'Parameterizable'