`
hozaka
  • 浏览: 38919 次
  • 性别: Icon_minigender_1
  • 来自: 上海
最近访客 更多访客>>
社区版块
存档分类
最新评论

扩展 Paperclip

阅读更多

Paperclip 是 Rails 的一个处理 attachment 的插件,相对于以往的 FileColumn 在灵活性和效率上更胜一筹,而且代码也比较好看。这个视频 简单的介绍了 Paperclip 的使用方法。

默认的设置,URL 的占位符中与模型本身相关的只有 id,但是一些情况下,你可能会更希望以其他形式来组织你的附件目录 - 比如以 SKU 来代替数据库记录的 id。这里我们暂不讨论这种做法的好坏,双方面的,好处是目录结构更具有维护性,坏处是万一以后升级数据库,SKU 加个前缀什么的…

Here we go!

使用 paperclip 需要在 model 中调用 has_attached_file 方法,检查文档,有一些简单的使用样例,但是没有我们需要的。通过方法描述我们知道这个方法建立了一个 Paperclip::Attachment 对象,我们继续看文档。对象的方法很少,首先思考:应为我们需要配置的是 attachment 的 url 规则,那么应当是对应整个类而不是单个实力,因此我们只关注 Peperclip::Attachment 的类方法,只有两个。default_options 没有描述,而且展开代码发现并不是我们需要的。

引用
# Paperclip::Attchment.interpolation
A hash of procs that are run during the interpolation of a path or
url. A variable of the format :name will be replaced with the return
value of the proc named “:name”. Each lambda takes the attachment and
the current style as arguments. This hash can be added to with your own
proc if necessary.

这正是我们需要的,接下来的扩展就非常方便了:

# app/models/product.rb
class Product < ActiveRecord::Base
  has_attached_file :photo,
    :style => { :thumb => '64x64>' },
    :url => '/images/products/:to_param.:extension'
  
  def to_param
    return self.sku
  end
end

# config/initializers/paperclip.rb
Paperclip::Attachment.interpolations.merge!(
  :to_param => lambda { |attachment, style| attachment.instance.to_param }
)

在这里不直接使用 :sku 作为占位符而使用 :to_param 是为了在其他模型中更加的灵活。

 

分享到:
评论
4 楼 hozaka 2009-02-01  
chenk85 写道

还是对你的做法很费解。

就算在另外一个类中声明has_attached_file,那关现在这个model什么事,你还是要另外定义一个url/path,它也不会知道之前定义的url。


所以扩展 to_params 而不是其他的
3 楼 chenk85 2009-01-28  
hozaka 写道
当然不是要共享给其他。因为扩展的是 Paperclip::Attachment 这个类,如果另外一个类 has_attached_file 也需要类似的功能,再添加一种占位符显然不是很好的方法,SKU 对新的类来说没有什么意义。而 to_param 方法本身就有这样的意义,更合理一点


还是对你的做法很费解。

就算在另外一个类中声明has_attached_file,那关现在这个model什么事,你还是要另外定义一个url/path,它也不会知道之前定义的url。

前段时间在一个项目中用paperclip替换了attachment_fu,其中使用了right_aws这个性能不错的gem来连接amazon。
2 楼 hozaka 2009-01-24  
当然不是要共享给其他。因为扩展的是 Paperclip::Attachment 这个类,如果另外一个类 has_attached_file 也需要类似的功能,再添加一种占位符显然不是很好的方法,SKU 对新的类来说没有什么意义。而 to_param 方法本身就有这样的意义,更合理一点
1 楼 lgn21st 2009-01-23  
看不出这里为什么用一个to_param方法给其他模型,因为在Product中使用has_attached_file后,就是说这个模型有了可以attach file的能力,它不会共享给其他模型。。。不过to_params比sku更加reasonable,但是没有必要。

相关推荐

    Rails的文件附件扩展Paperclip.zip

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

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

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

    Attachment-on-the-Fly:一个回形针混合动态生成重新调整大小的照片

    Attachment on the Fly 是一个扩展 Paperclip 的模块,它允许动态图像调整大小而无需首先通过 ActiveRecord。 这个 gem 只能调整图像大小。 如果您尝试调整 PDF 或其他附件的大小,则不会发生任何事情。 要求 思想...

    paperclip_database_attachments_responder:对 paperclip_database gem 的扩展

    回形针数据库附件响应器PaperclipDatabaseAttachmentsResponder 是一个扩展的 gem。 您不必再为downloads_files_for :user, :avatar提供带有downloads_files_for :user, :avatar特殊控制器!综合解决方案请查看我的...

    paperclip-dropbox:[已淘汰]使用Dropbox存储扩展回形针

    该宝石扩展了具有存储的功能。 设置 gem "paperclip-dropbox" , "&gt;= 1.1.7" 例子: class User &lt; ActiveRecord xss=removed&gt; :dropbox , :dropbox_credentials =&gt; Rails . root . join ( "config/dropbox.yml" ) ...

    papercrop:Paperclip的一个简单扩展,可以使用jCrop裁剪图像上传

    Paperclip的一个简单扩展,可以使用jCrop裁剪上载的图像。 安装 在您的Gemfile中包含papercrop或手动安装 gem install papercrop 您需要在资产中添加所需的文件... 在您的application.js中 //= require jquery //= ...

    paperclip-开源

    【Paperclip 开源项目详解】 ...结合开源软件的优势,Paperclip 不断优化和扩展,满足了不同用户的需求,成为日常办公和开发工作中的得力助手。如果你经常处理大量信息,那么 Paperclip 绝对值得你尝试。

    node-paperclip

    它目前仅适用于猫鼬,但已设置为易于扩展以与其他数据库一起使用。 另外,它目前可与AWS s3和文件系统一起使用,但将来应该很容易添加其他存储方法。 要安装(模块之一不能将其他模块作为依赖项包括在内吗?) ...

    paperclip-googledrive-new

    回形针谷歌驱动器 PaperclipGoogledrive 是一个可以扩展 Google Drive 的回形针存储空间的宝石。 适用于 Rails 3.x && RAILS 4x。安装将此行添加到应用程序的 Gemfile 中: gem 'paperclip-googledrive-new'然后执行...

    vidibus-tempfile:将 mime 类型和文件扩展名添加到 Tempfile

    部分 Tempfile 扩展名是从 Paperclip 复制的。 谢谢! 这个 gem 是开源 SOA 框架 Vidibus 的一部分: 安装 将依赖项添加到应用程序的 Gemfile 中: gem "vidibus-tempfile"然后在你的控制台上调用`bundle install`...

    Clippy the Paperclip Assistant-crx插件

    语言:English (United States) 为您访问的每个网页添加clippy。 将Microsoft的Clippy Virtual Assistant添加到每个网页。 他有动画。 他帮助你(不是他曾经做过的)。 他只是在你的屏幕上发冷。

    jekyll-asciidoc:Jekyll插件,可使用Asciidoctor将站点中的AsciiDoc源文件转换为HTML页面

    :paperclip: 您正在查看即将发布的文档。 如果您正在寻找旧版本的文档,请参考以下分支之一: ⁃ ⁃ ⁃建立和预览您的网站配置在安全模式下运行在模板中使用AsciiDoc内容自定义生成HTML 启用Asciidoctor扩展启用...

    Web开发敏捷之道-应用Rails进行敏捷Web开发-第三版(pdf)

    Rails框架的一个显著特点是其丰富的 gems 生态系统,书中会介绍如何选择和使用这些gem来扩展应用的功能,如Devise用于身份验证,CanCanCan进行权限管理,Carrierwave或Paperclip处理文件上传等。同时,还会讲解如何...

    ruby书籍1

    另外,Rails社区非常活跃,有许多gem(Ruby的包管理系统)可供扩展功能,如Devise用于身份验证,Pundit或CanCanCan处理授权,Carrierwave或Paperclip处理文件上传,Bootstrap或Sass提升前端设计等。这些gem在实际...

    Ruby_on_Rails快速Web应用开发实战

    RoR社区活跃,有许多优秀的gem(RoR的扩展库)可供使用,例如Devise用于用户认证,CanCanCan进行权限控制,Carrierwave或Paperclip处理文件上传,Bootstrap gems帮助快速构建响应式界面等。这些gem极大地扩展了RoR的...

    GladiatusCrazyAddon:Gladiatus浏览器游戏的浏览器附加组件

    :paperclip: 资料下载 我们建议您下载一个稳定的版本。 Alpha和Beta版本适用于开发人员(除非您想查看最新功能并给我们一些反馈)。 最新的公共发行版v4.3.3 (推荐) 从Google网上商店和Firefox插件页面快速安装...

    The.Art.of.Rails.May.2008

    7. **部署与扩展**:可能会讲解如何在各种服务器环境(如Heroku、AWS)上部署Rails应用,以及负载均衡和水平扩展的策略。 8. **Rails插件与gem**:介绍常用的Rails插件和gem库,如Devise用于身份验证,Carrierwave...

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

    在实际项目中,CarrierWave还可以与其他库结合使用,比如Paperclip或ActiveStorage,它们也提供了文件上传的解决方案。选择哪个库主要取决于项目需求,如存储需求、性能考虑以及对社区支持的依赖。 总结起来,Ruby-...

    ruby on rails

    5. **Rails的社区和生态系统**:Rails有强大的社区支持,开发者可以利用众多gem(Ruby的库)扩展功能,如Devise(身份验证),Paperclip或Carrierwave(文件上传),Bootstrap或Foundation(前端框架)等。...

    ruby插件.rar

    对于文件操作,`paperclip` 和 `carrierwave` 是常见的文件上传插件,它们方便地处理图片和其他文件的上传和存储。另外,`active_storage` 是 Rails 5.2 引入的内置文件处理系统,与 AWS S3 或其他云存储服务集成,...

Global site tag (gtag.js) - Google Analytics