创建资源后显示欢迎消息 60 分钟

Display a welcome message for 60 minutes after creating a resource

我有一个资源 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?

您可以比较 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
...

一旦使用 Elixir 的新原生 DateTime 结构的 Ecto 2.1 出来,这将变得更加简单:

diff = DateTime.to_unix(DateTime.utc_now) - DateTime.to_unix(user.inserted_at)
display_welcome_message = diff <= 3600