在 Yesod 中为两个模型条目使用一个表单域
Use one form field for two Model entries in Yesod
我正在制作一个 link 聚合器,人们可以在其中提交文章。
我的数据模型包含
Article
title Text
url Text
domain Text
我希望用户在表单中输入 url,然后我 运行 URL 上的一个函数来提取域,然后将两者保存在数据库中。
我希望用户只需输入一次 URL,如:
entryForm = renderDivs $ Article¬
<$> areq textField "Url" Nothing¬
<*> areq textField "Title" Nothing¬
但是我得到这个错误
Couldn't match type ‘Text -> Article’ with ‘Article’
Expected type: Form Article
Actual type: blaze-markup-0.7.0.0:Text.Blaze.Internal.Markup
-> MForm
(HandlerT App IO)
(FormResult (Text -> Article),
WidgetT (HandlerSite (HandlerT App IO)) IO ())
In the expression:
renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
In an equation for ‘entryForm’:
entryForm
= renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
因为表格显然与文章类型不匹配。
我不确定如何进行。有人告诉我,我可以 a) 编写替代文章的数据类型并在两者之间进行转换,或者 b) 创建我自己的自定义字段,尽管这对我这个新手来说似乎很难。
我推荐一个辅助函数,例如:
makeArticle :: Text -> Text -> Article
获取标题和 URL,从 URL 中提取域名,并构造一个 Article
值。然后你可以使用它来代替直接调用 Article
数据构造函数。
我正在制作一个 link 聚合器,人们可以在其中提交文章。
我的数据模型包含
Article
title Text
url Text
domain Text
我希望用户在表单中输入 url,然后我 运行 URL 上的一个函数来提取域,然后将两者保存在数据库中。 我希望用户只需输入一次 URL,如:
entryForm = renderDivs $ Article¬
<$> areq textField "Url" Nothing¬
<*> areq textField "Title" Nothing¬
但是我得到这个错误
Couldn't match type ‘Text -> Article’ with ‘Article’
Expected type: Form Article
Actual type: blaze-markup-0.7.0.0:Text.Blaze.Internal.Markup
-> MForm
(HandlerT App IO)
(FormResult (Text -> Article),
WidgetT (HandlerSite (HandlerT App IO)) IO ())
In the expression:
renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
In an equation for ‘entryForm’:
entryForm
= renderDivs
$ Article <$> areq textField "Url" Nothing
<*> areq textField "Title" Nothing
因为表格显然与文章类型不匹配。
我不确定如何进行。有人告诉我,我可以 a) 编写替代文章的数据类型并在两者之间进行转换,或者 b) 创建我自己的自定义字段,尽管这对我这个新手来说似乎很难。
我推荐一个辅助函数,例如:
makeArticle :: Text -> Text -> Article
获取标题和 URL,从 URL 中提取域名,并构造一个 Article
值。然后你可以使用它来代替直接调用 Article
数据构造函数。