Erlang erlydtl呈现mnesia记录

Erlang erlydtl呈现mnesia记录,erlang,Erlang,我有以下记录定义: -记录(联系人,{姓名,电子邮件}) 假设我在mnesia数据库中已经有一些联系人,并且我想在html页面上用erlydtl呈现他们,我首先查询数据库: F=fun()->qlc:e(qlc:q([X | | X我希望有一个更好的解决方案,但您可以定义一个助手函数,如: contact_to_list(C) -> lists:zip(record_info(fields, contact), tl(tuple_to_list(C))). 并将其传递给Erly

我有以下记录定义:

-记录(联系人,{姓名,电子邮件})

假设我在mnesia数据库中已经有一些联系人,并且我想在html页面上用erlydtl呈现他们,我首先查询数据库:



F=fun()->qlc:e(qlc:q([X | | X我希望有一个更好的解决方案,但您可以定义一个助手函数,如:

contact_to_list(C) ->
    lists:zip(record_info(fields, contact), tl(tuple_to_list(C))).
并将其传递给ErlyDTL:

your_template:render([{contact, contact_to_list(C)}]).
更新:如果要使此“动态”,以便可以将变量而不是原子传递到记录信息,可以使用“exprecs”解析转换:

基本上,在将parse_trans应用程序作为依赖项添加后,可以将以下内容添加到模块中:

-compile({parse_transform, exprecs}).
-export_records([
    contact
]).
然后使用新的动态功能:

record_to_list(Rec, RecName) ->
        lists:zip('#info-'(RecName), tl(tuple_to_list(Rec))).

提供了
record_to_proplist/2
record_to_proplist/3
这两个功能,它们对您传入的记录也是动态的。

感谢您的回复。有没有办法将record_info传递给一个变量而不是记录的一个原子,因为我希望进行动态查询,并且事先不知道名称记录的名称?我在答案中添加了一些关于exprecs的详细信息。感谢Roberto的回答。有没有办法用变量替换export_records指令中的contact atom,否则它将不会是完全动态的。我正在从文件中读取表名,然后为mnesia创建CRUD函数,因此我不知道e记录的名称,但这取决于创建表的人。非常感谢。这正是我要找的。