如何在Phoenix中的模型中添加实例方法?

Omm*_*nna 1 elixir phoenix-framework

我有这个型号:

defmodule MyApp.MyModel do
  use MyApp.Web, :model
  import Ecto.Query

  # ....
Run Code Online (Sandbox Code Playgroud)

如何向其添加实例方法,该方法也使用MyModel上的其他字段?这不起作用,因为在一个html页面上它抛出一个异常说the key :my_method not found

defmodule MyApp.MyModel do
  use MyApp.Web, :model
  import Ecto.Query

  # doesn't work
  def my_method do
    # how can I get access to "this" or "self" from here?

    "test"
  end 
Run Code Online (Sandbox Code Playgroud)

Gaz*_*ler 11

由于Elixir是一种函数式编程语言,因此您没有方法,而是具有函数.你也没有"实例"的概念.有一个自我函数,用于识别当前进程的PID,但不应将其与您在其他编程语言中习惯使用的"this"相混淆.

始终使用以下函数调用函数:

module.function(arg1, arg2)
Run Code Online (Sandbox Code Playgroud)

因此,要my_method在您的示例(我已重命名my_func)中调用该函数,您将执行以下操作:

def my_func(my_model) do
  my_model.some_attribute
end
Run Code Online (Sandbox Code Playgroud)

这里要注意的是你必须将struct作为参数传递给函数.然后你会用以下方法调用它:

foo = %MyModel{}
MyModel.my_func(foo)
Run Code Online (Sandbox Code Playgroud)

http://elixir-lang.org/getting-started/introduction.html是了解Elixir工作方式的好方法.