加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 如何将参数发送到Paperclip处理器

发布时间:2020-12-17 02:02:38 所属栏目:百科 来源:网络整理
导读:我试图了解如何将模型值发送到Paperclip自定义处理器,并且无法弄清楚为什么它如此困难,或解决方案可能是什么,因为我现在试图解决这个问题几天了… 这是我的代码,从我的模型和处理器中提取. 从我的模型: ... has_attached_file :receipt_file,:storage = :s3
我试图了解如何将模型值发送到Paperclip自定义处理器,并且无法弄清楚为什么它如此困难,或解决方案可能是什么,因为我现在试图解决这个问题几天了…
这是我的代码,从我的模型和处理器中提取.

从我的模型:

...
  has_attached_file :receipt_file,:storage => :s3,:s3_credentials => "#{Rails.root}/config/s3.yml",:path => "/:style/:id/:filename",:s3_protocol => "https",:styles => { :text => { style: :original,receipt_id: self.id }},processors: [:LearnProcessor]
...

为什么我不能使用“self.id”来获取收据ID?
如何将“/:style /:id /:filename”翻译成类似/original/1/abc.pdf的内容,如果我把receipt_id :: id,那么我从选项[:receipt_id]得到的(见下文) )是:id而不是1?

我需要某种插值吗?

处理器代码

module Paperclip

    class LearnProcessor < Processor
      attr_accessor :receipt_id,:style


      def initialize(file,options = {},attachment = nil)
        @file           = file
        @current_format = File.extname(@file.path)
        @basename       = File.basename(@file.path,@current_format)
        @style = options[:style]
        @receipt_id = options[:receipt_id]
        puts "Options #{options.inspect}"
      end
...

解决方法

我不知道这是否是特定于Paperclip的问题,但是我可以解决一个Ruby问题. Ruby允许您在类定义中调用类方法,这里提供了类似这样的直观DSL:

class MyModel < ActiveRecord::Base
  has_attached_file :receipt_file
end

问题是,当您调用此类方法时,您希望引用模型的id,但id仅在类的实例上可用.所以这不会奏效.通常,一旦实例可用,就会使用在运行时计算的块来完成此类操作.

has_attached_file :receipt_file,# ...
                    :styles => { :text => { style: :original,receipt_id: lambda{self.id} }},

但是,Paperclip需要知道如何接受并调用该块,我不确定它是否存在.可能有一种不同的方式来实现你想要做的事情,我不确定那是什么,但希望这会有所帮助.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读