在模板中使用辅助函数

win*_*yer 1 elixir phoenix-framework

我写了一个full_name(user)辅助函数,想在模板中使用它。

我尝试<%= full_name(@current_user) %>在模板中使用但出现undefined function full_name错误。如何在模板中使用此功能?

网络/视图/user_helpers.ex

defmodule MyApp.UserHelpers do
  alias MyApp.User

  def full_name(%User{first_name: first_name,
                      last_name: last_name,
                      honorific_prefix: honorific_prefix,
                      honorific_suffix: honorific_suffix}) do
    [honorific_prefix, first_name, last_name, honorific_suffix]
    |> Enum.reject(&(&1 == ""))
    |> Enum.join(" ")
  end 
end
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 5

helper 并没有什么特别之处,它们只是包含函数的模块。您需要使用函数的全名(包括模块名称):

<%= MyApp.UserHelpers.full_name(@current_user) %>
Run Code Online (Sandbox Code Playgroud)

或者将其导入到视图中(由于模板编译到视图中,该函数将在模板范围内可用):

MyApp.UserView do
  use MyApp.Web, :view
  import MyApp.UserHelpers
  ...
end
Run Code Online (Sandbox Code Playgroud)

然后你可以使用:

<%= full_name(@current_user) %>
Run Code Online (Sandbox Code Playgroud)