如何从表单输入中插入外键值?

时间:2014-05-17 19:36:01

标签: yesod

说我有以下关系:

    Section 
        name Text 
        UniqueSection name

    Subject
        name Text
        UniqueSubject name

    Faculty
        name Text
        UniqueFaculty name

    Assignment
        section SectionId
        faculty FacultyId
        subject SubjectId
        UniqueAssignment section subject

处理程序:

    postNewAssignmentR :: Handler Html
    postNewAssignmentR = do

    -- don't know what to use instead xxxField for SectionId/FacultyId/SubjectId

            sec <- runInputPost $ ireq xxxField "section"
            fac <- runInputPost $ ireq xxxField "faculty"
            sub <- runInputPost $ ireq xxxField "subject"

            runDB $ insert $ Assignment sec fac sub
            setMessage "Created new Assignment"
            redirect AssignmentsR

如果&#34;部分&#34;,&#34; faculty&#34;,&#34; subject&#34;下拉输入及其相应的ID作为值(在我们从runInputPost得到的文本中),如何将它们转换为sectionId,facultyId,等等? 或者我应该采用任何其他方法来插入外键?

1 个答案:

答案 0 :(得分:1)

我刚刚意识到你没有使用Yesod生成表单,所以我下面的原始建议可能无效。您可以将输入值设为Int,然后使用fKey = Key $ PersistInt64 intReturnValue

不确定以下代码是否适合您的情况:

您可以使用selectField获取部分名称列表,然后在下拉列表中填充它 - 值应自动映射到ID。我不使用输入表格,但猜测这样的事情应该有效:

<*> ireq (selectField sections) "Section Name"


where
sections = do
    entities <- runDB $ selectList [] [Asc SectionName]
    optionsPairs $ map (\e -> (sectionName $ entityVal e, entityKey e)) entities