浏览 3379 次
锁定老帖子 主题:扩展 Paperclip
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-01-23
最后修改:2009-01-23
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 是为了在其他模型中更加的灵活。
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-01-23
看不出这里为什么用一个to_param方法给其他模型,因为在Product中使用has_attached_file后,就是说这个模型有了可以attach file的能力,它不会共享给其他模型。。。不过to_params比sku更加reasonable,但是没有必要。
|
|
返回顶楼 | |
发表时间:2009-01-24
当然不是要共享给其他。因为扩展的是 Paperclip::Attachment 这个类,如果另外一个类 has_attached_file 也需要类似的功能,再添加一种占位符显然不是很好的方法,SKU 对新的类来说没有什么意义。而 to_param 方法本身就有这样的意义,更合理一点
|
|
返回顶楼 | |
发表时间: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。 |
|
返回顶楼 | |
发表时间:2009-02-01
chenk85 写道 还是对你的做法很费解。 就算在另外一个类中声明has_attached_file,那关现在这个model什么事,你还是要另外定义一个url/path,它也不会知道之前定义的url。 所以扩展 to_params 而不是其他的 |
|
返回顶楼 | |