Ruby on rails 如何制作回形针';s的附件路径值不可变?

Ruby on rails 如何制作回形针';s的附件路径值不可变?,ruby-on-rails,path,paperclip,immutability,Ruby On Rails,Path,Paperclip,Immutability,每次请求路径时,Rails插件曲别针都会根据一些动态用户定义的规则对附件路径进行插值。这允许您将名称/ID/等放入附件的路径中 但是,我有两种情况,原始路径依赖项可以更改,当它们更改时,我再也找不到附件,因为插值路径现在指向错误的位置 我只需要在保存文件时对路径进行一次插值,然后不管插值依赖项如何更改,都会保留该路径并在保存后返回该路径。我发现了问题 我有两种情况,原始路径依赖关系可以更改 他们为什么会改变?这两个案例是什么?是什么阻止你想出一个他们永远不会改变的方案呢?我的一位同事想出了一个很

每次请求路径时,Rails插件曲别针都会根据一些动态用户定义的规则对附件路径进行插值。这允许您将名称/ID/等放入附件的路径中

但是,我有两种情况,原始路径依赖项可以更改,当它们更改时,我再也找不到附件,因为插值路径现在指向错误的位置

我只需要在保存文件时对路径进行一次插值,然后不管插值依赖项如何更改,都会保留该路径并在保存后返回该路径。

我发现了问题

我有两种情况,原始路径依赖关系可以更改


他们为什么会改变?这两个案例是什么?是什么阻止你想出一个他们永远不会改变的方案呢?

我的一位同事想出了一个很好的解决方案。它没有无缝地集成到回形针中,但很有效。要点是:

  • 在模型上使用“before_create”过滤器,对可能更改的路径中使用的所有值进行快照

  • 从回形针路径插值中引用这些快照值(与实际源相反,实际源可能会更改)

  • 因此,您的路径定义如下所示:

    :path => '.../:snapshotted_name/...'
    
    before_create :snapshot_names # only set once
    
    private
    
    def snapshot_names
      snapshotted_name = customer.name
    end
    
    代码如下所示:

    :path => '.../:snapshotted_name/...'
    
    before_create :snapshot_names # only set once
    
    private
    
    def snapshot_names
      snapshotted_name = customer.name
    end
    

    例如“/customer\u name/product\u name/”这样的示例,其中客户或产品名称将来可以更改,但文件的路径不会更改,因此当这些名称更改时,插入路径将中断。然后使用ID或其他方法插入。换句话说,想出一个方案,使路径永远不会改变。找出什么是不变的,然后以此为基础确定路径。