我使用的是play框架和slick,play框架在表单验证中使用了一个案例映射,但是有一些值我不需要验证,因为它们不是用户输入的,例如,在后端提供了ID和Date。
,到最后,,我希望有这样一个类案例,以提供光滑和使用我的表。
case class Order(id: Long, order: String, date: Date)对于Play的表单验证,我将提供一个单独的case类:
case Class inputableOrder(order: String)然后,我可以创建Order类来获取inputableOrder中的变量并将其添加到Order类中吗?
case class Order(id: Long, date: Date) // <- some way to add the variable from inputableOrder?我只是试图防止重复,但我仍然需要两个不同的案例类(一个用于表单验证,另一个用于处理数据库)。
是否有方法修改现有的case类、删除变量或修改变量类型?
发布于 2013-07-14 17:35:34
我想你在这里有几个选择:
InputableOrder成为Order的一部分:
case类InputableOrder(顺序: String) // .case类顺序(输入: InputableOrder,id: Long,date: Date) // .
这可能是最惯用的解决办法。但是,如果您后来意识到InputableOrder需要一些不应该出现在Order中的东西,那么它可能是不灵活的。Order成为InputableOrder的子类。在本例中,向超类传递参数时会出现一些代码重复,而且超类不能是case类,因此必须将其声明为常规类,并自己创建一个提取器:
类InputableOrder(val顺序: String) // .对象InputableOrder { def unapply(o: InputableOrder):OptionString = Some(o.order);//如果您有多个构造函数参数,则返回//一个元组类选项( String,String等)} case类顺序(重写val顺序:String,id: Long,date: Date)扩展InputableOrder(order) // .
同样,可能会出现与前一点相同的问题。other更新此实例: def : def,other: InputableOrder) = this(other,that.id,that.date);def toInput = InputableOrder(order);}
通过这种方式,只需提供缺少的字段,就可以从Order创建InputableOrder,反之亦然。您需要编写这些帮助方法/构造函数一次,但是使用它们很容易。
您还可以使用隐式方法,例如
隐式def toInput(其他: InputableOrder):Order = other.toInput;
让事情变得更简单。https://stackoverflow.com/questions/17640468
复制相似问题