我在控制器中有一个带有user
函数的资源show
:
def show(conn, _params) do
user =
Repo.get!(User, conn.assigns[:user_id])
display_welcome_message = false
conn
|> assign(:user, user)
|> assign(:display_welcome_message, display_welcome_message)
|> render("show.html", conn: conn)
end
我想在user
创建后的前60分钟内显示欢迎讯息。如何在该时间范围内将display_welcome_message
设置为true?
答案 0 :(得分:2)
您可以比较user.inserted_at
与:calendar.universal_time
之间的差异:
inserted_at = :calendar.datetime_to_gregorian_seconds(Ecto.DateTime.to_erl(user.inserted_at))
now = :calendar.datetime_to_gregorian_seconds(:calendar.universal_time)
display_welcome_message = now - inserted_at <= 3600
...
一旦Ecto 2.1出局,使用Elixir的新原生DateTime结构,这将变得更加简单:
diff = DateTime.to_unix(DateTime.utc_now) - DateTime.to_unix(user.inserted_at)
display_welcome_message = diff <= 3600