Podsumowanie: pobieram listę identyfikatorów użytkowników z tabeli transakcji członków, która jest następnie używana do generowania listy użytkowników z bazy danych. Jest to następnie wykorzystywane do generowania kodu JSON wysyłanego do strony zawierającej listę użytkowników powiązanych z kontem.
Tło: kod Scala przy użyciu Squeryl w Play! Struktura
Błąd: value id is not a member of Option[models.User]
podczas mapowania użytkowników do generatora JSON
Kod: oto kod używany kolejno do ostatecznego wygenerowania JSON
def memberIds(accountId: Long) = { from(DB.members)(m =>
where(m.accountId === accountId)
select (m)).map(_.userId).toSet
}
def membersToAccount(id: Long) = {
memberIds(id).map( i => models.User.get(i))
}
def listMembers(accountId: Long) = {
Json(generate(Account.membersToAccount(accountId)
.map(user => Map(
"id" -> user.id,
"name" -> user.name,
"username" -> user.username
))))
}
Zamieszanie: klasa User zawiera identyfikator, który wygląda jak case class User( val id: Long, itp.
Nie rozumiem, dlaczego spowodowałby to ten błąd. Czy to problem ze składnią lub gdzie mapuję użytkowników? Dziękuję!
2 odpowiedzi
To jest powód, dla którego models.User jest zapakowany w kontener opcji (właściwie to jest to monada). To jak próba wywołania metody User bezpośrednio na Liście użytkowników, np.: List(someUsers).id
Zasadniczo oznacza to, że tą wartością może być Some (opakowanie nie zerowe) lub Nothing (tak jak null
, ale lepiej).
Co więcej, lepiej nie używać get
w opcjach, rozważ powyższy link, aby uzyskać szczegółowe informacje.
Rozwiązał problem. Każdy obiekt użytkownika został opakowany w opcję typu Some(user). Aby to naprawić, musiałem użyć metody .get
na każdej właściwości.
def listMembers(accountId: Long) = {
Json(generate(Account.membersToAccount(accountId)
.map( user => Map(
"id" -> user.get.id,
"name" -> user.get.name,
"username" -> user.get.emailAddress
))))
}
Podobne pytania
Powiązane pytania
Nowe pytania
scala
Scala to język programowania ogólnego przeznaczenia, którego głównym celem jest wirtualna maszyna Java. Zaprojektowany, aby wyrazić powszechne wzorce programowania w zwięzły, elegancki i bezpieczny sposób, łączy zarówno imperatywne, jak i funkcjonalne style programowania. Jego kluczowe cechy to: zaawansowany system typów statycznych z wnioskiem o typie; typy funkcji; dopasowywanie wzorców; niejawne parametry i konwersje; przeciążenie operatora; pełna interoperacyjność z Javą; konkurencja