0
스칼라 리프트 프레임 워크에서 매핑 된 필드에 혼합 할 수있는 특성을 만들어 데이터베이스의 여러 필드에 대해 동일한 속성을 재정의 할 필요가 없도록 만드는 방법은 무엇입니까?매핑 된 필드에 혼합 할 수있는 특성을 만들어 데이터베이스의 여러 필드에 대해 동일한 속성을 재정의 할 필요가 없도록 만드는 방법은 무엇입니까?
아래 코드에서 일부 중복성을 제거하고 싶습니다. 구체적으로 말하면 반복해서 추가하지 않으려는 것입니다 :
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
override def dbDisplay_? = false
여러 개의 db 필드가 있습니다. 다음과 같이
trait PrivateField extends ...??? {
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
override def dbDisplay_? = false
}
다음 객체 재 지정으로이 혼합 :
object owner extends MappedLongForeignKey(this, User) with PrivateField
object status extends MappedInt(this) with PrivateField
등이다 나는 이것에 대해 이동하는 방법이 뭔가를 보이는 특성을 작성하는 것이라고 생각하고 이것은 좋은 방법으로 문제에 접근하고 있습니까? 그렇다면 형질을 쓰는 방법에 대한 제안은 무엇입니까? 다음은 중복성을 줄이려는 코드입니다.
class Mytable extends LongKeyedMapper[Mytable] with IdPK {
def getSingleton = Myclass
object owner extends MappedLongForeignKey(this, User) {
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
override def dbDisplay_? = false
}
object description extends MappedString(this, 140)
object name extends MappedString(this, 140)
object status extends MappedInt(this) {
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
override def dbDisplay_? = false
}
object entry_number extends MappedInt(this) {
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
}
object quanitity extends MappedDecimal(this, MathContext.DECIMAL64, 2) {
override def writePermission_? = false
override def readPermission_? = false
override def shouldDisplay_? = false
override def show_? = false
override def dbDisplay_? = false
}
}
object Mytable extends Mytable with LongKeyedMetaMapper[Mytable] with CRUDify[Long, Mytable] {
override def editMenuLoc:Box[Menu] = Empty
override def deleteMenuLoc:Box[Menu] = Empty
override def viewMenuLoc:Box[Menu] = Empty
override def createMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in"))
override def showAllMenuLocParams: List[Loc.AnyLocParam] = List(If(User.loggedIn_? _, "Not logged in"))
override def findForList(start: Long, cnt: Int): List[Mytable] =
findAll(StartAt(start), MaxRows(cnt), By(owner, User.currentUser))
override def findForParam(in: String): Box[Mytable] =
for {
user <- User.currentUser
id <- Helpers.asLong(in)
mytable <- find(By(this.id, id), By(owner, user))
} yield mytable
}
감사합니다,
션, 주셔서 감사합니다 응답. 나는 당신이 그것을 올렸을 때 정확히 복사하고 붙여 넣었지만, 다음과 같은 오류가 있습니다 :'trait MappedField는 타입 매개 변수를 취합니다 [오류] self : MappedField =>'어떻게 해결할 수 있습니까? –
필드에 입력 할 수 있도록 특성에 유형 매개 변수를 추가해야합니다. –
Sean - 감사합니다! 단 하나의 변경이 필요합니다 :'Mapper [OwnerType]'뒤에 누락 된 닫는 대괄호를 추가해야합니다. (Mapper [OwnerType]]'(나는 이것을 직접 수정하려했으나 적어도 6 자 이상이어야합니다. 이 편집은 단 한 문자 일 것입니다). –