4

ブログ投稿の URL に日付部分を追加しようとしています。

/blog/2016/11/23/my-blog-post-slug

ナメクジだけでなく日付部分もチェックしたい。これは私がこれまでに得たものです:

getBlogPostR :: Int -> Int -> Int -> Slug -> Handler Html
getBlogPostR pathYear pathMonth pathDay pathSlug = do
  Entity _ BlogPost {..} <- runDB $ getBy404 $ UniqueBlogPostSlug pathSlug
  let (year, month, day) = toGregorian $ utctDay blogPostCreatedAt
  if (fromIntegral year /= pathYear && month /= pathMonth && day /= pathDay)
    then notFound
    else
      defaultLayout $ do
        setTitleI blogPostTitle
        $(widgetFile "blog/post")

ちょっとダサいようです。今年、月、日の部分をクエリ フィルタリング パラメータとして追加する方法はありますか? (生のクエリを実行できることは知っていますが、これは私が探しているものではありません)

[追加情報]

私のモデルは次のように定義されています。

BlogPost
  uuid Text
  title Text
  slug Text
  markdownContent Text
  createdAt UTCTime
  UniqueBlogPostUuid uuid
  UniqueBlogPostSlug slug
  Primary uuid
4

1 に答える 1

0
getBlogPostR :: Slug -> Handler Html
getBlogPostR pathSlug = do
  Entity _ BlogPost {..} <- runDB $ getBy404 $ UniqueBlogPostSlug pathSlug
  mYear <- lookupGetParam "year"
  mMonth <- lookupGetParam "month"
  mDay <- lookupGetParam "day"
  case (,,) <$> mYear <*> mMonth <*> mDay of
    Just (queryYear, queryMonth, queryDay) -> do 
      let (year, month, day) = toGregorian $ utctDay blogPostCreatedAt
      if (fromIntegral year /= queryYear && month /= queryMonth && day /= queryDay)
        then notFound
        else
          defaultLayout $ do
            setTitleI blogPostTitle
            $(widgetFile "blog/post")
    Nothing -> notFound
于 2018-05-10T17:42:49.203 に答える