`
holin
  • 浏览: 17684 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

在after_filter中根据paperclip上传的文件做相应处理

F# 
阅读更多

Paperclip是很方便的处理上传附件的插件,三下两下就为应用增加上传文件功能。

我有个应用场景是在文件上传后,得到文件的行数并保存下来。于是我增加了一个after_filter:

after_save :set_item_count
attr_accessor :no_after_save_filter
def set_item_count
return if @no_after_save_filter
return if self.asset.path.nil?
if File.exist?(self.asset.path)
  File.open(self.asset.path, "r") do |f|
    @no_after_save_filter = true
    self.item_count = f.readlines.size
    self.save
  end
end
end
has_attached_file :asset

 

但在新增的时候老是不能正确设置item_count,在更新的时候才能正确处理。通过查看日志,发现set_item_count总是在保存文件之前被调用,所以执行set_item_count的时候文件还不存在,自然就不能正确设置item_count了。

 

折腾了半天还是没能搞定,就在差点放弃的时候,想到了一个办法,那就是:把has_attached_file :asset 移到 after_save :set_item_count之前,也就是:

has_attached_file :asset
 
after_save :set_item_count
 
attr_accessor :no_after_save_filter
 
def set_item_count
  return if @no_after_save_filter
  return if self.asset.path.nil?
  if File.exist?(self.asset.path)
    File.open(self.asset.path, "r") do |f|
      @no_after_save_filter = true
      self.item_count = f.readlines.size
      self.save
    end
  end
end

 

Ok,搞定。 其实就是filter的顺序问题。

首发:http://www.holin.info/posts/4c6fe69aff1f011a9a000001

分享到:
评论

相关推荐

    rails上传文件_paperclip

    在Ruby on Rails框架中,Paperclip是一个非常流行的用于处理文件上传的库。它提供了一种简单而优雅的方式来管理和处理模型中的附件,如图片、文档等。Paperclip与ActiveRecord紧密集成,使得在Rails应用中添加文件...

    paperclip_database_attachments_responder:对 paperclip_database gem 的扩展

    综合解决方案请查看我的paperclip_database分支,并将此解决方案集成到:。安装由于 PaperclipDatabaseAttachmentsResponder 覆盖了 paperclip_database 的内部 api,因此使用精确的'2.2.1'版本。 将这些行放入您的...

    Ruby-CarrierWaveRubyWeb框架更优雅的解决方案文件上传

    它弥补了Ruby标准库在处理文件上传时的不足,提供了丰富的功能和易于定制的接口。 在Ruby on Rails中,文件上传通常是一个棘手的问题,因为它涉及到临时文件的处理、数据库记录的更新以及最终文件的存储位置。...

    paperclip_torrent:生成一个.torrent文件以补充您的回形针上传

    将已处理的回形针附件转换为可下载的torrent文件,以供以后检索。 设置 当前,PaperclipTorrent在Paperclip上需要一个边缘版本以支持多种样式保存。 要使用,请将以下内容添加到您的Gemfile中: gem 'paperclip',...

    ruby上传文件

    7. **Form表单与Action**:在视图中,文件上传通常通过`form_for`辅助方法创建表单,指定一个处理文件上传的动作(action)。这个动作对应控制器中的一个方法,比如`create`或`update`。 8. **Strong Parameters**...

    paperclip模板

    Paperclip - Responsive Professional Theme for Business Projects and Mobile Apps Perfect for business and personal use Built with LESS Looks great on all major browsers, tablets and phones 21 unique ...

    Rails的文件附件扩展Paperclip.zip

    Paperclip 是 Rails 框架的一个插件,用于扩展 ActiveRecord 以支持简单的文件附件的功能。 标签:Paperclip

    paperclip-storage-encrypted_filesystem:使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展 Paperclip

    这个 gem 使用常规文件系统存储提供程序和 ActiveRecord 通过自动附件加密扩展了 Paperclip。 安装 将此行添加到应用程序的 Gemfile 中: gem 'paperclip-storage-encrypted_filesystem', git: '...

    delay_paperclip:使用delay_job或Resque在后台处理您的回形针附件

    DelayedPaperclip使您可以通过在后台任务中处理附件 为什么? Paperclip最常见的用例是轻松将图像文件附加到ActiveRecord模型。 大多数情况下,这些图像文件将具有多种样式,并且在创建它们时需要调整大小。 这...

    升级版本后Rails的文件上传

    在Ruby on Rails框架中,文件上传是一个常见的需求,特别是在应用的升级过程中,处理文件上传的策略可能会有所变化。Rails提供了多种处理文件上传的方法,包括直接存储到本地文件系统、使用云存储服务(如Amazon S3...

    Ruby-PaperClipActiveRecord的简单文件附件管理

    总的来说,Ruby-PaperClip与ActiveRecord的结合使得在Rails应用中处理文件上传变得简单且灵活。它提供了一套完整的解决方案,包括验证、存储、版本管理和展示,是许多开发者在构建有文件上传需求的应用时的首选工具...

    rails 文件上传

    它提供了一个简单的接口来处理文件上传,包括存储位置、版本管理和缩略图生成等。 6. **Paperclip**: Paperclip是另一个流行的文件上传gem,但已不再维护,推荐使用ActiveStorage。如果你正在使用Paperclip,可能...

    paperclip-s3-tutorial-korean:回形针文件上传到 s3 韩文

    回形针上传到 S3 要求 aws-sdk 回形针 宝石安装 Gemfile gem ' aws-sdk ' gem ' paperclip ' 并运行 bundle install 创建 s3 这里 设置s3信息 从获取访问密钥和秘密密钥并将它们写好。 然后创建一个config/aws....

    paperclip_watermark:回形针处理器在图像上应用水印

    回形针水印描述这是一个简单的 Paperclip 处理器,用于在 Paperclip 的图像上应用水印。 水印将调整大小以适合基本图像。 很少有选项可用于指定位置和不透明度: watermark_distance_from_top : 以百分比指定从顶部...

    paperclip

    附加的文件保存到文件系统中,并通过易于理解的规范在浏览器中引用,该规范具有明智而有用的默认值。 有关更多详细选项,请参见有关has_attached_file的文档。 完整的在线。 要求 Ruby和Rails Paperclip现在需要...

    rails 多图上传.txt

    - 创建对应的控制器和路由来处理文件上传逻辑。 - 使用Paperclip处理上传的文件,包括存储和缩放等操作。 通过上述步骤,即可实现一个完整的Rails多图上传功能。此方案不仅提供了前端用户友好的交互体验,还利用...

    paperclip-example:在 Rails 4.0.0 中使用 Paperclip 和 S3 的示例

    在 Rails 4.0.0 上运行带有 AWS S3 演示的 Paperclip 教程这是一个教程和演示,用于获取在 Rails 4.0.0 上运行的带有 AWS S3 上传的 Paperclip。 在本教程中,我们将创建一个简单的站点,可以在其中创建文章并可以将...

    phrails-paperclip:一个插件,将上传文件并检索它们以供显示

    http://www.php.net/manual/en/book.curl.phpFileInfo - http://www.php.net/manual/en/book.fileinfo.php图像处理: ImageMagick - http://www.php.net/manual/en/book.imagick.phpPhrails-Paperclip Ini 文件该...

    paperclip-s3:未维护

    每一个当您将应用程序部署到,您正在更改RAILS_ROOT,因此您所有上传的文件都将丢失,您的存储桶将一团糟! 默认的Heroku工作路径是默认路径。 如何使用 使用以下命令将宝石添加到您的Gemfile中 gem “paperclip-...

Global site tag (gtag.js) - Google Analytics