Phoenix模型中的数据操作

时间:2016-04-30 12:03:05

标签: elixir phoenix-framework

(来自Rails世界,我现在和凤凰城一起玩,试图找出工作原理)

从脚手架开始,我有一个包含" first_name"的用户模型。和" last_name"属性,我现在要做的就是将它们连接到" full_name"属性,在模型中,并测试它。

好的,比较Rails和Phoenix可能不是最好的选择,但让我展示一下我是如何使用Rails做的,所以我的问题可以完全理解:

# Model
class User < ActiveRecord::Base
  def full_name
    "#{first_name} #{last_name}"
  end
end

# Test
it "concatenates first_name and last_name" do
  user = users(:jhondoe)
  assert_equal "jhon doe", user.full_name
end

我怎样才能使用凤凰实现同样的东西,甚至是#34;这样做的方式&#34;,因为我在经过数小时的密集谷歌搜索后找不到任何相关内容?

我在哪里以及如何使用Phoenix处理数据操作?

2 个答案:

答案 0 :(得分:3)

由于Elixir中没有方法,推荐的方法是在ld: library not found for -lPods-watchkitapp Extension clang: error: linker command failed with exit code 1 (use -v to see invocation)模块中为此创建一个函数,并在需要User的全名时显式调用它。

User

然后,在您的测试,模板和/或视图中,调用它:

defmodule YourApp.User do
  ...

  def full_name(%YourApp.User{first_name: first_name, last_name: last_name}) do
    "#{first_name} #{last_name}"
  end
end

旁注:在Ecto 1.x中,可以创建一个虚拟字段并添加YourApp.User.full_name(user) 回调以在每次加载模型时设置其值,但是在Ecto 2.0中将删除回调(应该是很快就会发布)所以创建一个函数是可行的方法。

答案 1 :(得分:0)

连接名字和姓氏不得是模型的责任。您需要设计您的应用程序并创建可执行此类操作的特殊模块,某些装饰器或函数式编程中的正确名称。

但是关于代码,Dogbert的答案很棒。