0
사용자가 사용자 이름을 업데이트 할 수있는 양식이 있습니다. 사용자 이름은 고유해야합니다. 나는 Yesod 책에 언급 된 표준 유효성 검사를 사용하여 생각 : Forms를,하지만 난 그것의 주위에 ... 관련 데이터베이스 정의 내 머리를하지 않습니다데이터베이스의 값을 기반으로 폼 유효성 검사
Profile
username Text
user UserId
UniqueProfile user
UniqueUsername username
가 검증없이, 사용자가 오류 -을 받게됩니다 (db-level에 대한 username-uniqueness 제약 조건 때문에). 좀 더 친근 해지기를 바랍니다.
어떻게 해결할 수 있습니까? 유효성 검사에서 사용자 이름이 채워진 행을 계산해야하며 로그인 한 UserId와 다른 사용자 (사용자가 다른 항목도 업데이트하고 사용자 이름을 유지할 수 있음)와 달라야한다고 생각했습니다. 그러나 그 결과가 유효성 확인의 Left
부분에 사용되도록하려면 어떻게해야합니까?
솔루션 :
profileForm :: Maybe ProfileForm -> Form ProfileForm
profileForm mpf = renderBootstrap $ ProfileForm
<$> areq usernameField (FieldSettings {fsLabel = "Username", fsTooltip = Nothing, fsId = Nothing, fsName = Nothing, fsAttrs = [("autofocus","autofocus")]}) (pfUsername <$> mpf)
where
unav x = do
(Entity uid _) <- requireAuth
usernamecount <- runDB $ count [ ProfileUsername ==. x
, ProfileUser !=. uid ]
return $ if usernamecount > 0
then Left ("Username already taken" :: Text)
else Right x
usernameField = checkM unav textField
그 해결책을 안내했다. 감사! – davidbe