上传和编辑多个图像

时间:2013-12-03 10:46:02

标签: ruby-on-rails

我有一个拥有多个图像的模型项目。 第一:我想知道如何上传多张图片。 第二:如何动态编辑此图像(裁剪,旋转,缩放)

2 个答案:

答案 0 :(得分:1)

为您的应用程序设置资产库的最佳方法是首先为您的资产指定一个定制模型,即附件。然后,您可以利用多态ActiveRecord关联(http://railscasts.com/episodes/154-polymorphic-association)在多个模型之间共享Attachment模型。我还建议使用Carrierwave作为文件管理的选择。

在这个例子中,我建立了一个名为'attachable'的多态关联:

<强> attachment.rb

def Attachment << ActiveRecord::Base
   attr_accessible :attachable_id, :attachable_type, :description, :file
   belongs_to :attachable, polymorphic: true
   mount_uploader :file, FileUploader
end

我还为附件模型分配了两个新属性,这些属性将包含关联的模型ID(在您的情况下为项目ID)和附加类型。另外,请注意我已将Carrierwave中的mount_uploader分配给附件表(有关详细信息,请参阅carrierwave文档)。

<强> project.rb

def Project << ActiveRecord::Base
   attr_accessible :title, :description, :attachments_attributes
   has_many :attachments, as: :attachable, :dependent => :delete_all
   accepts_nested_attributes :attachments
end

现在,在我的Project模型中,我创建了一个名为attachments的has_many关系,它引用了Attachment表中可附加的多态关联。此外,关联的附件取决于项目,如果项目被删除,将被删除。

我还在项目模型中设置了可以编辑的附件模型。因此,您可以在项目表单中分配嵌套字段。

我们的最后一步是配置Carrierwave上传器文件。我正在使用MiniMagick Gem来压缩图像并将其调整为不同版本,同时利用'from_version'方法来提高处理速度。见下文:

应用/上传/ file_uploader.rb

class FileUploader < CarrierWave::Uploader::Base
  include CarrierWave::Compatibility::Paperclip
  include CarrierWave::MiniMagick
  include Sprockets::Helpers::RailsHelper
  include Sprockets::Helpers::IsolatedHelper

  process resize_to_fit: [500,500]

  version :large do
    process resize_to_fill: [400,400]
  end

  version :medium, :from_version => :large do 
    process resize_to_fill: [150,150]
  end

  version :small, :from_version => :medium do
    process resize_to_fill: [50,50]
  end

end

这应该足以让你入门。

答案 1 :(得分:0)

要上传图片/视频(资源),请PaperClip ir CarrierWave。我建议将此simple tutorial作为裁剪的基础知识。当然,你可以自定义它。