(来自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处理数据操作?
答案 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的答案很棒。