乐者为王

Do one thing, and do it well.

为什么使用Paperclip而不是Fleximage来实现图片上传

Rails有很多处理上传的插件:

FileColumn是最早的这类插件,比较容易使用。UploadColumn与之类似。ActiveUpload则需要SWFUpload配合使用。attachment_fu作为acts_as_attachment的进化版本非常强大,不过使用起来比较复杂。Fleximage是现在上传和处理图片的首选,据说连Paperclip也比不上它,不过使用下来的情况是使用简单,功能太弱。比如要把上传的图片放到以用户名为目录的文件夹中就实现不了,而且上传的图片名字也不能设定。Paperclip作为一个处理附件上传的插件,既有attachment_fu的功能强大,又有Fleximage的使用简单,相对于FileColumn在灵活性和效率上更胜一筹,而且代码也更优雅。

将用户名作为上传图片的目录,先要在config/initializers中创建一个paperclip.rb文件,定义一个username变量:

1
2
3
Paperclip.interpolates :username do |attachment, style|
  attachment.instance.user.login
end

上面的代码中attachment.instance就是指该附件实例,因为在avatar.rb中有如下语句:

1
belongs_to :user

所以该实例有一个User对象,User对象有个login字段,该字段就是我们需要的用户名。

Comments