簡體   English   中英

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)
    }

}

但得到編譯錯誤:

非最終類“MongoObject”中的方法“make(for:)”必須返回Self以符合協議“Parameterizable”

您的非最終“抽象”模型與子類符合Parameterizable作為Model一致性的一部分。 Parameterizable 需要返回Self 默認情況下,這是通過從路徑組件讀取實體的 id 來實現的。 您現在遇到的問題是編譯器無法為子類返回Self ,因為它是在更高的模型上實現的。

解決方案非常簡單,您不能在這里進行子類化。

我可能為時已晚,但我遇到了完全相同的問題,我所要做的就是讓課程成為決賽。

非最終類“MongoObject”中的方法“make(for:)”必須返回 Self 以符合協議“Parameterizable”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM