寫文章的時候,如何在沒發布前得知文章 id?

2015-09-01 22:58:06 +08:00
 SolidZORO

情況是這樣的,寫文章的時候需要用 ajax 插入文件、圖片。

附件 attachments 表裡有

object_model
object_type
object_id

這幾個字段。

而文章表不記錄任何附件信息。

attachments 表中的 object_id 就是文章對應 id ,所以寫入 attachments 表的時候,需要獲得這個 id ,但文章沒發的時候是不會有這個 id 的。

那麼:

1 ,用 max ()+1 的方式去猜測文章發佈出來的 id ,但這樣單用戶還好,多用戶併發就會有預想不到的問題。

2 ,插入文件的 object_id 為 0 ,提交文章的時候再批量更新,但是這樣一來,如果文章最後沒提交,上傳的文件就白上傳了,因為沒入庫,後期無法查詢到這些附件並清除。

3 ,新建文章的時候先 init ,也就是當成編輯處理,但這樣也有缺陷,那就是可能導致文章 id 不連貫的問題。

所以,想問問大家有沒有更好的方案?

2014 次点击
所在节点    问与答
11 条回复
orvice
2015-09-01 22:59:59 +08:00
3 ID 为啥要连贯...
xinple
2015-09-01 23:38:45 +08:00
先存到临时表,发布文章成功了,搬到正式附件表;如果上传之后关掉了没发布文章,上传的附件就是垃圾文件,定期清理临时表和对应的文件,可以每次清理 12 小时以前的,以免把正在写文章的人附件清理掉。
zhyu
2015-09-02 00:08:41 +08:00
@orvice 方便别人抓取呀
sinux
2015-09-02 00:15:06 +08:00
@zhyu 233333
shiniv
2015-09-02 00:18:41 +08:00
object_id 留空,然后用计划任务的方式定时清理
文章发表就把文章的 ID 更新进去
cxbig
2015-09-02 00:51:39 +08:00
我的做法:
每个新文章自生成一个 hash ,用这个 hash 做 attachment 的目录。
如果文件成功保存,一切安好;
如果放弃编辑了,比对文章 hash 和 attachment 文件夹即可清理多余内容。
ljbha007
2015-09-02 01:21:49 +08:00
你先上传附件再写文章表 然后再写 attachments 表就行了啊
msg7086
2015-09-02 01:34:06 +08:00
多媒体数据和文章分开存啊。先上传再插入再发表。
SolidZORO
2015-09-02 08:16:47 +08:00
@orvice 這個純屬個人的強迫症愛好 : >

@cxbig 關於這個思路我再想想,在想 hash 放哪裡才好。
zhyu
2015-09-02 09:32:42 +08:00
说正经的,文章表加个 publish 的标记字段。
wolong
2015-09-02 15:56:03 +08:00
第二个方法好,如果文章没提交,下次打开写文章页面时清除掉上次上传的附件。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/217710

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX