2014-09-22 48 views
0

我的问题是关于如何从查询结果列表中提取每个实体Post的年份。如何从我的模型中提取yesod中处理程序的信息?

我的模型是这样的:

Post 
    name Text 
    content Text 
    date UTCTime default=CURRENT_TIME 
    deriving Show 

而且我的处理程序是这样的:

getYearR :: Integer -> Handler Html 
getYearR year = do 
    posts <- runDB $ selectList [] [Desc PostDate] 
    years <- --some function with posts for extract the list of years 
    defaultLayout $ do 
     aDomId <- newIdent 
     setTitle "Blog" 
     $(widgetFile "homepage") 

也许溶液与约单子一些基本知识有关,但我不知道如何工作的对于这种情况。

感谢您的时间,我真的很感谢你的帮助

回答

2

首先我创建了一个方便的功能,提取一年。我引用these docs获取DayUTCTimethese docsDay获得年份。

import Data.Time 

getYear :: UTCTime -> Integer 
getYear time = 
    let (year,_,_) = toGregorian $ utctDay time 
    in year 

使用此功能,我可以通过提取使用entityValEntity Haskell的记录得到的年份列表,提取UTCTime使用postDate,然后用我的getYear功能提取一年

let years = map (getYear . postDate . entityVal) posts 

如果您使用的是哈姆雷特中的年份列表,则可以跳过创建中间值years的值,并重复执行posts

<ul> 
    $forall Entity id post <- posts 
     <li> 
      <h4>The year is #{getYear $ postDate post}</a>