是否有一个Ecto等效于Ruby中的Active Record实例方法?

时间:2016-07-29 23:49:04

标签: elixir phoenix-framework ecto

我正在尝试找出在Ecto中合并first_namelast_name字段的最佳方法。

在rails的活动记录中,我可以创建一个实例方法,如:

def name
  self.first_name + self.last_name
end

然后当我创建一个活动记录实例时,我可以使用User.name。如果我需要将名字和姓氏结合起来或对我的Ecto模型做一些其他逻辑,我该怎么做呢?这是一个简单的例子,我可以动态地连接它,但如果有更复杂的逻辑怎么办?

3 个答案:

答案 0 :(得分:3)

您需要将Ecto.Schema(通常通过调用某些Repo方法获得)传递给该方法。从那里访问模型的必需字段,对它们执行操作并返回结果。像

这样的东西
  def name(user) do
    user.first_name <> user.last_name
  end

将其放入模型User.ex文件中,然后从应用中的任意位置拨打User.name(user)。 (MyApp.User.name(user)如果User没有别名)

答案 1 :(得分:2)

当我开始写Elixir时,我正在努力解决同样的问题。实例方法itch来自于在对象中思考,因为Elixir是一种函数式语言,这些东西会感觉不对。我能给出的最好的建议就是接受这就是它的方式并尝试用数据而不是对象来思考:)

答案 2 :(得分:1)

这通常是Ecto / Phoenix中的View关注点。它不是你通常在架构中做的事情。