我需要在上传时从附件中访问该网址,因此我必须像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_commit
,after_create
回调来访问self.excel.url
,但它不起作用。
答案 0 :(得分:1)
我认为问题可能与回调的顺序有关。
正如上面的评论中所讨论的,附件文件确实在after_save
callback defined in Paperclip中物理保存到磁盘,并在has_attached_file
调用时添加到模型类中。 / p>
因此,您必须确保自己的after_save
回调(想要处理上传的文件)在<{strong> has_attached_line
之后定义。
注意:after_create
回调确实无法使用,因为在after_save
之前调用它。