Ecto + Phoenix:如何使用不同的密钥创建资源路径:id?

时间:2016-05-29 16:53:36

标签: elixir phoenix-framework ecto

我有一个应用程序,其中资源通过普通ID保存在数据库中。但是,为了防止数据库枚举,在路径和链接中向用户显示的ID类似于UUID。 (例如:http://example.com/payment/yta6Bo34s

要在Phoenix + Ecto中创建基于身份的普通链接,可以执行以下操作:

link to: payment_path(@conn, :show, payment)

但是,这会隐式使用此处传递的.id结构的%Payment{}字段。

使用UUID时,必须执行

link to: payment_path(@conn, :show, payment.uuid)

或者,对于我的应用程序,UUID在数据库中保存为bigints,但显示为base36-strings:

link to: payment_path(@conn, :show, UUID.encode(payment.uuid))

有没有办法简化这个过程?例如,是否有一个协议可以实现传递给Phoenix路径助手的结构,因此它们会自动使用自定义过程来生成show / edit / update / delete路径?

1 个答案:

答案 0 :(得分:3)

我认为您可以按照here描述的to_paramhere所述的派生形式实施。