如何从.eex文件中调用函数

时间:2015-10-05 20:51:15

标签: tags elixir phoenix-framework

我试图学习凤凰城,然后遇到了一个问题。在Rails中,我可以说

<%= Rails.version %>

获取当前rails版本显示在.erb文件中。我在凤凰城询问了如何做到这一点,并得到了答案

:application.get_key(:phoenix, :vsn)

不幸的是,当我试图与凤凰城合作时,这突显了我的无知。当我把

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

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

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

请指出任何帮助我了解接下来要做什么的文档。谢谢!

1 个答案:

答案 0 :(得分:8)

:application.get_env调用返回格式为

的元组
{: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在视图中使用的键无关。