gpt4 book ai didi

scala - 如何使用 Squeryl 在 Lift 中实际处理 List[FieldError]

转载 作者:行者123 更新时间:2023-12-03 08:31:29 25 4
gpt4 key购买 nike

我是两个 Lift 的新手和 Squeryl .

我正在关注 lift cookbook 上的示例关于如何创建 Schema 和一些表。我设法这样做并插入记录,这是我的模式代码:

object PortfolioSchema extends Schema {

val systemConfigurations = table[SystemConfiguration]

on(systemConfigurations) {
sc =>
declare(
sc.name defineAs (unique)
)
}

class SystemConfiguration extends Record[SystemConfiguration] with KeyedRecord[Long] {

override def meta: MetaRecord[SystemConfiguration] = SystemConfiguration

override val idField = new LongField(this)

val name = new StringField(this, 256) {
override def validations = valUnique("unique.name") _ :: super.validations

override def setFilter = trim _ :: super.setFilter
}

private def valUnique(errorMsg: => String)(name: String): List[FieldError] = SystemConfiguration.unique_?(name) match {
case false => FieldError(this.name, S ? errorMsg) :: Nil
case true => Nil
}

}

object SystemConfiguration extends SystemConfiguration with MetaRecord[SystemConfiguration] {

def unique_?(name: String) = from(systemConfigurations) {
p => where(lower(p.name) === lower(name)) select (p)
}.isEmpty

}

}

长话短说,我只有一个具有唯一字段名称的实体和一个检查此属性并返回 FieldError 的验证函数。由 Lift 定义库如下:
case class FieldError(field: FieldIdentifier, msg: NodeSeq) {
override def toString = field.uniqueFieldId + " : " + msg
}

object FieldError {
import scala.xml.Text
def apply(field: FieldIdentifier, msg: String) = new FieldError(field, Text(msg))
}

基本上它的作用是附加 field.uniqueFieldId到我指定的错误消息,所以如果我这样使用它:
valUnique("unique.name") _

我在 List[FieldError] 中得到了什么是 Full(name_id) : unique.name
这对我来说看起来不对,因为要获得我的错误消息,我必须拆分字符串并记住字段标识符,有没有更好的方法来处理这种错误情况?

最佳答案

fieldId : msg string 是 FieldError 类的 toString 表示。该 toString 方法仅用于记录/调试。您没有理由看到它出现在您的应用程序中的任何位置。通常,您将验证您的对象并将 FieldErrors 的显示委托(delegate)给 Lift,使用类似 S.error(listOfFieldErrors) 的内容。和电梯的Msgs snippet .如果您使用一些内置帮助程序来生成表单,例如 Crudify 或 LiftScreen,则会为您处理字段验证和错误添加。

关于scala - 如何使用 Squeryl 在 Lift 中实际处理 List[FieldError],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22283341/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com