2011-10-03 6 views
7

나는 잠자리로 여러 이미지 업로드를 시도하고있었습니다 .3. 나는 튜토리얼을 찾았지만 찾을 수 없었다. 내가 Carrierwave 여러 이미지 업로드에 대한 자습서를 찾았지만 .. 도움이 :)하십시오 잠자리 행운을 찾을 수 couldnt는잠자리와 다중 이미지 업로드

답변

10

paperclip 유사 자체가 일반적으로 프로젝트의 미디어를 관리하는 데 사용할 수 있습니다

Dragonfly 서문, . 레일즈 애플리케이션 내에서 여러 파일을 업로드하는 것과 관련하여 질문 자체가 귀결됩니다. 이 주제에 관한 일부 자습서는 특정 파일을 저장하기 위해 Dragonfly를 사용하는 모델에 쉽게 적용 할 수 있습니다. 나는 그것들을 들여다 보아 당신의 프로젝트에 적응 시키려고 노력할 것을 제안합니다.

그러나 현재 개발중인 레일 3.2 응용 프로그램에 대해 작성한 최소 예를 제시 할 수는 있지만 완벽하지는 않습니다 (예 : 유효성 검사 처리). 그러나 시작점을 줄 수 있습니다.

예는

그냥 참고로, 핵심 아이디어는 here에서 가져옵니다. 이 예제는 Rails 3.2.x에서 수행됩니다.

사용자가 방학 데이터베이스를 가지고 있다고 가정 해 봅시다. 사용자가 휴가를 통해 여행 보고서를 작성할 수 있습니다. 그들은 작은 그림뿐만 아니라 약간의 설명을 남길 수도 있습니다.

는 여행에 대한 간단한 액티브 기반 모델을 구축하여 시작

, 지금 그것을 Trip를 호출 할 수 있습니다 : 당신이 볼 수 있듯이

class Trip < ActiveRecord::Base 
    has_many :trip_images 
    attr_accessible :description, :trip_images 
end 

모델은 여행의 이미지는 has_many 협회를 통해 부착했다.

class TripImage < ActiveRecord::Base 
    attr_accessible :content, :trip_id 
    belongs_to :trip_id 

    image_accessor :content 
end 

여행 이미지 그 자체를 저장 첨부 파일 : 콘텐츠 필드에 저장되어있는 파일을 가지고위한 잠자리를 사용하는 TripImage 모델에 잠깐 모습을 가지고 있습니다. 이 모델 내에서 제한을 설정할 수 있습니다 (예 : 파일 크기 또는 마임 유형. 생성을 제외하고, 여기에 특별한

class TripController < ApplicationController 
    def new 
     @trip = Trip.new 
    end 

    def create 
     @trip = Trip.new(params[:template]) 

     #create the images from the params 
     unless params[:images].nil? 
      params[:images].each do |image| 
      @trip.trip_images << TripImages.create(:content => image) 
     end 
     if @trip.save 
      [...] 
    end 
end 

아무것도 :

이의는 newcreate 작용이있는 TripController을 만들어 보자 (만약 당신이 좋아하면 당신은 비계를 통해이를 생성 할 수 있습니다, 그것은 공상 지금까지 아무것도입니다) 해시 값이 params 인 다른 항목의 이미지 new.html.erb 템플릿 파일 내에서 파일 업로드 필드에서 볼 때이 의미가 (또는 당신이 Trip 모델의 필드에 사용하는 부분에서) : 그러나, 거기에,

[...] 
<%= f.file_field :trip_images, :name => 'images[]', :multiple => true %> 
[...] 

이 순간을 위해 일한다 이 이미지에 대한 제한이 없습니다.당신은 Trip 모델에 custom validator 통해 서버 측 이미지의 수를 제한 할 수 있습니다

class Trip < ActiveRecord::Base 
    has_many :trip_images 
    attr_accessible :description, :trip_images 
    validate :image_count_in_bounds, :on => :create 

protected 
    def image_count_in_bounds 
     return if trip_images.blank? 
     errors.add("Only 10 images are allowed!") if trip_images.length > 10 
    end 
end 

당신이 최대를두고 있지만, 당신은 또한 파일 필드에 클라이언트 측 유효성 검사를 사용할 수, 일반 아이디어는 것 (커피 스크립트에서) 파일 필드를 변경시 파일을 확인하는 :

jQuery -> 
    $('#file_field_id').change() -> 
     #disable the form 
     for file in this.files 
      #check each file 
     #enable the form 

요약

잠자리는 다른 솔루션 때 다르게 그 행동하지 않는 한 당신은, 기존의 튜토리얼에서 많이 구축 할 수

파일을 업로드하는 경우에만 이이됩니다. 그러나, 당신이 뭔가 더 좋아하는 것을 원한다면, 나는 많은 사람들이 나보다 먼저 가지고있는 것처럼 jQuery Fileupload을 제안 할 것이다.

어쨌든, 나는 약간의 통찰력을 제공 할 수 있었으면 좋겠습니다.

LG 전자,

플로