tags - 如何从 .eex 文件调用函数

标签 tags elixir phoenix-framework

我正在尝试学习 Phoenix,但遇到了一个问题。在 Rails 中,我可以说

<%= Rails.version %>

获取显示在 .erb 文件中的当前 rails 版本。我问了如何在 Phoenix 做到这一点,得到了答案
:application.get_key(:phoenix, :vsn)

不幸的是,这突显了我在尝试使用 Phoenix 时的无知。当我放
<%= :application.get_key(:phoenix, :vsn) %>

在我的 .eex 文件中,我得到
no function clause matching in Phoenix.HTML.Safe.Tuple.to_iodata/1

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

最佳答案

: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

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

关于tags - 如何从 .eex 文件调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32957668/

相关文章:

sql - 在数据库中存储标签的最佳方式?

mysql - 具有文章和标签的关系数据库的最佳结构

elixir - 外部 : how to do when the primary key of a table is the id of an association

postgresql - Docker-compose:应用程序无法连接到 Postgres 容器

elixir - 基于负载的Phoenix路由

CSS 帮助,如何在 div 中定位此链接

xml - XLSX 中的单元格标记中的 "s"属性表示什么

elixir - 如何预加载关联并在 ecto 中返回它?

elixir - 为什么这个 elixir 函数中的下划线在这里?

elixir - 在 Ecto 迁移中使用 Repo