我的问题是如何从查询结果列表中提取每个实体Post的年份。
我的模特是这样的:
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")
也许这个解决方案与关于monad的一些基本知识有关,但我不知道这种情况是如何工作的。
感谢您的时间,我非常感谢您的帮助
答案 0 :(得分:2)
首先,我创建了一个便利功能来提取年份。我从Day
获取UTCTime
时引用these docs,从Day
获取年份时引用these docs。
import Data.Time
getYear :: UTCTime -> Integer
getYear time =
let (year,_,_) = toGregorian $ utctDay time
in year
使用此功能,我可以使用entityVal
从Entity
中提取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>