我有一个拥有多个图像的模型项目。 第一:我想知道如何上传多张图片。 第二:如何动态编辑此图像(裁剪,旋转,缩放)
答案 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作为裁剪的基础知识。当然,你可以自定义它。