значения по умолчанию для PersistList на SQLite - Yesod - PullRequest
0 голосов
/ 27 марта 2019

Я хотел бы добавить значение PersistList в сущность пользователя со значением по умолчанию. Мой файл модели выглядит следующим образом. И Models.hs файл:

User
    ident Text
    password Text Maybe
    UniqueUser ident
    perms [Privileges] default=[PrvDemoOne]
    deriving Typeable

data Privileges =
  PrvDemoOne         -- ^ what can be demo one...
  | PrvDemoTwo       -- ^ what can be demo two...
  deriving (Show,Read,Eq)

derivePersistField "Privileges"

код компилируется, но когда новый пользователь добавляется в таблицу, сохраните пустой массив вместо массива со значением по умолчанию.

1 | Google-UID: 223344555661778819911 || []

Вопрос в том, как мне сохранить столбец со значением по умолчанию?

1 Ответ

0 голосов
/ 27 марта 2019

Вы читали это ? Значение поля default на самом деле не имеет ничего общего со стороной Haskell, оно передается для задания описания «значения по умолчанию» вашей СУБД. В этом случае [PrvDemoOne] передается непосредственно в SQLite, который будет интерпретировать его как бред (потому что это недопустимое выражение SQL), так что это либо игнорируется, либо (что здесь имеет место) обрабатывается так, как если бы вы не установить значение по умолчанию на всех.

Если вам нужно значение по умолчанию на стороне Haskell, вам просто нужно создать для этого функцию, т.е. что-то вроде

defaultUser :: Text -> Maybe Text -> User
defaultUser i maybePw = User { ident = i, password = maybePw, perms = [PrvDemoOne] }

Если вы хотите использовать сторону SQL по умолчанию, вам нужно написать соответствующее выражение SQL для значения, которое вы пытаетесь представить.

В примечании, не связанном с Haskell: «нормальный» способ представления списков (или, скорее, наборов в этом случае!) В SQL - через отношения, так что у вас обычно есть пользователи отображения отношений «многие ко многим» к их привилегиям вместо поля списка.

...