覆盖Paperclip:附件方法

时间:2016-03-08 18:41:13

标签: ruby-on-rails ruby ruby-on-rails-4 paperclip

我需要在上传时从附件中访问该网址,因此我必须像https://github.com/thoughtbot/paperclip/issues/816

一样定义after_flush_writes方法。

我怎样才能做到这一点?

到目前为止,我已经这样做了,但它不起作用:

class ExcelFile < ActiveRecord::Base
  belongs_to :insertion 
  has_attached_file :excel
  validates_attachment_content_type :excel, content_type: [ "application/vnd.ms-excel",
                    "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
                    "application/msword",
                    "application/vnd.openxmlformats-officedocument.wordprocessingml.document"]


  def after_flush_writes
    super
    byebug
    file = Roo::Excelx.new(self.excel.url(:original, timestamp: false))
    input_from_generals self.id, file
    input_from_financials self.id, file
  end

我尝试使用after_commitafter_create回调来访问self.excel.url,但它不起作用。

1 个答案:

答案 0 :(得分:1)

我认为问题可能与回调的顺序有关。

正如上面的评论中所讨论的,附件文件确实在after_save callback defined in Paperclip中物理保存到磁盘,并在has_attached_file调用时添加到模型类中。 / p>

因此,您必须确保自己的after_save回调(想要处理上传的文件)在<{strong> has_attached_line之后定义。

注意:after_create回调确实无法使用,因为在after_save之前调用它。