2015-04-08 66 views
1

中的兩個模型條目使用一個表單域我正在製作一個鏈接聚合器,用戶可以在其中提交文章。對Yesod

我的數據模型包含

Article 
    title Text 
    url Text 
    domain Text 

我想用戶輸入網址插入表單,然後我的網址,以獲取域名,然後保存無論是在數據庫運行的功能。 我想用戶只需要一次輸入網址,如:

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)創建我自己的自定義字段,儘管這兩個對我來說都很難作爲新手。

回答

1

我推薦一個輔助功能,如:

makeArticle :: Text -> Text -> Article 

這需要的標題和URL,從URL中提取域名,並構建一個Article值。然後你可以使用它來代替直接調用Article數據構造函數。