如何从 .eex 文件调用函数

How to call functions from a .eex file

我正在努力学习凤凰,运行进了一道题。在 Rails 我可以说

<%= Rails.version %>

获取 .erb 文件中显示的当前 rails 版本。我询问了如何在 Phoenix 中执行此操作,并得到了答案

:application.get_key(:phoenix, :vsn)

不幸的是,这凸显了我的无知运行ce,因为我试图与 Phoenix 一起成长。当我把

<%= :application.get_key(:phoenix, :vsn) %>

在我的 .eex 文件中,我得到

no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata/1

请向我指出任何可以帮助我了解下一步尝试的文档。谢谢!

:application.get_env 调用 returns 元组格式:

{:ok, '1.0.0'}

Phoenix.HTML.Safe 没有解码此格式 (source) 的元组的函数。 您需要从调用中提取版本:

<%= :application.get_key(:phoenix, :vsn) |> elem(1) %>

但是更好的方法是使用辅助函数:

defmodule VersionHelper do
  def version do
    case :application.get_key(:phoenix, :vsn) do
      {:ok, vsn} -> vsn
      _          -> #raise or return null or something else
    end
  end
end

然后可以在您的视图中使用 VersionHelper.version 调用它 - 这意味着您获取的版本与 phoenix 在视图中使用的密钥无关。