我有一个博客,后端显示帖子列表。每个帖子都有publish_on
值,这是一个日期时间 - 如果当前时间晚于publish_on
,则帖子处于活动状态(Post有一个名为active
的布尔虚拟字段)。
当我向Repo查询帖子列表时,我想查看列表,如果当前时间在{{1}之后,请将帖子的active
设置为true }。
什么是最多" Elixirian"这样做的方法? (另外,Elixir社区" Pythonic"是什么版本?)
publish_on
defmodule MyApp.Post do
use MyApp.Web, :model
schema "posts" do
field :title, :string
field :content, :text
field :publish_on, Ecto.DateTime
field :active, :boolean, virtual: true, default: false
timestamps()
end
MyApp.PostController
def index(conn, _params) do
query = from p in Post,
posts = Repo.all(query)
###I assume some kind of mapping goes here
render(conn, "index.html", posts: posts)
end
答案 0 :(得分:2)
我使用for
查看帖子,使用DateTime.utc_now
将post.publish_on
与DateTime.compare
进行比较,如果是:gt
,将active
设为true
:
posts = Repo.all(query)
now = DateTime.utc_now
posts = for post <- posts do
case DateTime.compare(now, post.publish_on) do
:gt -> %{post | active: true}
_ -> post
end
end
答案 1 :(得分:2)
您可以在查询中初始化虚拟字段:
query = from p in Post, select: %{p | active: (s.publish_on < ^DateTime.utc_now())}
posts = Repo.all(query)