SwiftとVapor(サーバー側)を使用して基本的なCRUDを作成しています。 「編集」:私のコントローラでSwift with Vapor:オプションでモデルフィールドを更新します。
は、私は新しいメソッドを作成しました。この方法では、ユーザーのパスワードと役割を更新することができます。 IF要求にパスワードデータがある場合は、パスワードを更新します。 IF要求に新しい役割の配列がある場合は、役割を更新します(まだ行われていない兄弟関係)。
これは私のコントローラで「編集」メソッドです:
func edit(request:Request, id:String) throws -> ResponseRepresentable {
// Check if the password came in POST request:
let password = request.data["password"]?.string
// Check if the request has a new set of roles
let roles = request.data["roles"]?.array
let user:ClinicUser = try ClinicUser.edit(id: id, password: password, roles: roles)
return user
}
そして、私のモデルの編集方法は、次のようになります。私のコントローラで
static func edit(id:String, password:String?, roles:Array<NodeRepresentable>?) throws -> ClinicUser {
guard var user:ClinicUser = try ClinicUser.find(id) else {
throw Abort.notFound
}
// Is it the best way of doing this? Because with "guard" I should "return" or "throw", right?
if password != nil {
user.password = try BCrypt.hash(password: password!)
}
// TODO: update user's roles relationships
try user.save()
return user
}
、によって指さエラーがありますCannot convert value of type '[Polymorphic]?' to expected argument type 'Array<NodeRepresentable>'
というXCode。そして、修正として、Xcodeはこのように書く示唆:
let user:ClinicUser = try ClinicUser.edit(id: id, password: password, roles: roles as! Array<NodeRepresentable>)
私はこれが安全であるかどうかわからないですか、これはそれがベストプラクティスである場合は(でアンラップを強制!)。
スウィフトに、私は他の言語とは異なる「考える」必要がある場合、私は知りません(PHP、などなど)。最後に、私が欲しいのです:あなたのコントローラで
static func edit(id:String, fieldA:String?, fieldN:String, etc..) throws -> ClinicUser {
// If fieldA is available, update fieldA:
if fieldA != nil {
model.fieldA = fieldA
}
// If fieldN is available, update fieldN:
if fieldN != nil {
model.fieldN = fieldN
}
// After update all fields, save:
try model.save()
// Return the updated model:
return model
}
はxcodeが正常に動作することを示唆していますか? –