2013-07-22 3 views
1

영구적으로 일대 다 관계를 정의했지만 입력으로 외래 키 중 하나를 사용할 수있는 양식을 만드는 방법을 파악할 수 없습니다. 나는 자동차에 대한 양식을 생성 할 때양식의 영구 관계 캡처

Person 
    name String 

Car 
    personId PersonId 
    name Text 
    type Text 

지금, 무엇 personId에 대한 필드 타입이어야이 같은 내 사용 사례를 단순화? 나는 이런 식으로 뭔가를 시도했지만 오류가 : 나는 위를 실행하면

entryForm :: Maybe Car -> Form Car 
entryForm car = renderDivs $ Car 
    <$> areq personIdField "Person" Nothing 
    <*> areq textField "Car Name" (carName <$> car) 
    <*> areq textField "Type" (carType <$> car) 

내가 오류 얻을 : Not in scope: `personIdField'.

내가 intField 시도를하며 말한다 :

Couldn't match expected type `KeyBackend 
           persistent-1.2.1:Database.Persist.Sql.Types.SqlBackend Person' 
      with actual type `Text' 
Expected type: Field 
       m0 
       (KeyBackend 
        persistent-1.2.1:Database.Persist.Sql.Types.SqlBackend Person) 
    Actual type: Field m0 Text 
In the first argument of `areq', namely `intField' 
In the second argument of `(<$>)', namely 
    `areq intField "Person" Nothing 

가 이상적으로 내가 좋아하는 것 (너무 많지 않은 경우) 또는 너무 많은 경우 자유 양식 텍스트 필드 (예 : 자동 완성)가있는 경우 사용자 이름 드롭 다운을 채 웁니다. 사용자로부터 외부 키를 입력받을 수있는 방법에 대한 제안 사항은 무엇입니까?

업데이트 :

내가 아니라 내가 정확히이 일을하고 있다면 반드시 다음과 같이 selectField를 사용했습니다. 나는 여전히 오류가 발생합니다.

where 
    personId = do 
     person <- runDB $ selectFirst [] [Asc PersonName] 
     case person of 
      Just (Entity pId p) -> return pId 
      -- Nothing    -> ??? 

을 한 후 나는

<$> areq (selectField [("First", personId)]) "Person Name" Nothing 

덕분에 처음 AREQ을 변경 : 우선은 personId를 얻을 수있는 곳 문을 만들어!

+1

당신은'selectField'를 사용해야합니다. – Ankur

+1

@Ankur 당신이 그것을 의미하는 것을 자세히 설명해 주시겠습니까? selectField를 사용했지만 비슷한 오류가 발생했습니다. 그렇다면 제대로 사용하는지 잘 모르겠습니다. 또한, 사용자로부터 자유 형식 입력을 받고 나중에 ID로 다시 매핑하려는 경우이 구조가 어떻게 작동합니까? – Ecognium

답변

3

selectField를 올바르게 사용하는 방법을 알 수있었습니다.

where 
    people = do 
     entities <- runDB $ selectList [] [Asc PersonName] 
     optionsPairs $ map (\p -> (personName $ entityVal p, entityKey p)) entities 

양식 필드가되었다 : 난 아직도 아직 자유 형식 항목을 파악하지 않은 그러나 이것은 좋은 시작이다

<$> areq (selectField people) "Person Name" Nothing 

이 내가하고 결국 것입니다.