User
has_many
emails
和Email
有一个属性md5sum
。对于给定用户@user
,我想在user#show
中显示Gravatar图片。
模板中的以下代码不起作用:
<img src="http://www.gravatar.com/avatar/<%= @user.emails.first.md5sum %>" />
如何在模板中获取md5sum
的{{1}}的{{1}}?
网络/控制器/ user_controller.ex
email
网络/模型/ user.ex
@user
网络/模型/ email.ex
[...]
def show(conn, %{"id" => id}) do
user = Repo.get!(User, id) |> Repo.preload([:emails])
conn
|> assign(:user, user)
|> render("show.html")
end
[...]
答案 0 :(得分:2)
如果有可用的话,emails
将是电子邮件列表。
<img src="http://www.gravatar.com/avatar/<%= @user.emails.first.md5sum %>" />
无效的原因是因为使用.
来访问地图上的属性。 emails
是一个列表。
您可以使用hd/1获取列表的第一个元素:
<img src="http://www.gravatar.com/avatar/<%= hd(@user.emails).md5sum %>" />
如果用户没有关联的电子邮件,则会出错。
您可能最好在视图中定义一个函数(或者在视图中导入的另一个模块中):
def gravatar_url(user) do
case user.emails do
[email | _tail] -> "http://www.gravatar.com/avatar/#{email.md5sum}"
_ -> "some-default-avatar"
end
end
然后您可以在模板中使用它:
<img src="<%= gravatar_url(@user) %>" />