2013-07-16 32 views
2

我想创建一个非常简单的CRUD应用程序,我不确定什么是更新和删除记录的最佳方法。我能够成功列出所有记录并创建新记录。现在我想通过应用程序删除这些记录,但我不知道该怎么做。CRUD App:获取ID来删除和更新记录

比方说,我那里有一个字段名称Person表所示:

Person 
    name Text 

我有一个叫PersonR处理程序列出表中的所有人员,并输入一个成一个新的。为了处理删除和更新,我认为我可以创建一个名为personId的隐藏字段,然后通过InputForm处理表单,但无法轻松获取ID。我试过unKey personId,但它仍然有PersistInt64 1,所以我认为这是不正确的方式去解决它,即使我设法钓鱼编号。

另一种方法我可以采取的就是创建一个新的处理程序(比如ListPersons)刚刚列出的所有人员,然后更改Person处理程序Person/#personId.我喜欢尽可能地避免这一点,并保留相关的人的一切行动在一个地方如果可能的话。

如果我正在考虑实施基本CRUD应用程序功能的权利和任何建议,请让我知道吗?

更新:我最终创建了一个将处理GET和POST的PersonPanel。处理程序负责DELETE和PUT。我最终将4个处理程序放在同一个人处理程序文件中,因此不会四处散布。希望这有助于他人。

谢谢!

回答

1

如何使用Web.PathPieces.PathPiece类中的toPathPiece将密钥转换为Text并将其放入隐藏字段中?

我想yesod使用这个类将密钥转换为Text时,它将密钥编码成类型安全的URL,反之亦然。

即使您可以通过这种方式将密钥转换为Text,首选的方法是发送DELETE请求至Person/#personId。您可以在您的小屋模板中使用@{...}生成此URL。

+0

谢谢@snak。它看起来像发送删除到人/#personId可能是最好的方式去做。这种方法唯一的问题是,我最终会有2个处理程序在同一个表上工作 - 一个获取(全部)/发布实体,另一个删除并更新它们。对我来说似乎有点不直观。如果没有人有更好的建议,我会接受你的答案。 正如你所说,我可能会避免toPathPiece,因为我不太了解Haskell,可能应该坚持有据可查的方法:) – Ecognium