V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
SolidZORO
V2EX  ›  问与答

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

  •  
  •   SolidZORO · 2015-09-01 22:58:06 +08:00 · 2092 次点击
    这是一个创建于 3400 天前的主题,其中的信息可能已经有所发展或是发生改变。

    情況是這樣的,寫文章的時候需要用 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 不連貫的問題。

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

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

    @cxbig 關於這個思路我再想想,在想 hash 放哪裡才好。
    zhyu
        10
    zhyu  
       2015-09-02 09:32:42 +08:00
    说正经的,文章表加个 publish 的标记字段。
    wolong
        11
    wolong  
       2015-09-02 15:56:03 +08:00
    第二个方法好,如果文章没提交,下次打开写文章页面时清除掉上次上传的附件。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   869 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:45 · PVG 05:45 · LAX 13:45 · JFK 16:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.