2012-12-02 7 views
0

HTML5 multipart을 사용하여 Rails 3.2 및 Paperclip을 사용하여 여러 파일 (사진)을 한꺼번에 업로드 할 수 있습니다. 그것은 작동하고 다음과 같은 결과가 업데이트 될 때 생성/산출다중 파트 파일 업로드 배열에 user_id 추가

# shops/_form.html.erb 
<%= form_for @shop, :url => { :action => action, :type => type }, :html => { :multipart => true } do |f| %> 
    <%= f.text_field :name %> 
    <%= f.file_field :shop_photos_data, :multiple => true, :name => "shop[photos_attributes][][data]" %> 
<% end %> 

: 여기 내 양식이다

{"utf8"=>"✓", 
"authenticity_token"=>"9jXvIwcllct7UyUfo6cvhEucQf2u3SY50SuaCLtFO4c=", 
"shop"=>{ 
    "name"=>"First shop", 
    "photos_attributes"=>{"0"=>{ 
    "image"=>[ 
     #<ActionDispatch::Http::UploadedFile:0x00000104b78978 
     @original_filename="first_test_image.jpg", 
     @content_type="image/jpeg", 
     @headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"first_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n", 
     @tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-vz78ee>>, 
     #<ActionDispatch::Http::UploadedFile:0x00000104b78950 
     @original_filename="second_test_image.jpg", 
     @content_type="image/jpeg", 
     @headers="Content-Disposition: form-data; name=\"gallery[photos_attributes][0][image][]\"; filename=\"second_test_image.jpg\"\r\nContent-Type: image/jpeg\r\n", 
     @tempfile=#<File:/var/folders/bQ/bQYZC2ukFZCvbKzEDGRtJE+++TI/-Tmp-/RackMultipart20110622-4459-1jzhhyg>> 
     ] 
    } 
    } 
}, "commit"=>"Save", "action"=>"create", "controller"=>"shops"} 

이 작동을하고는 shops_controller.rb로 이동하지만, photos_controller.rb로하지 않습니다. 내 Photo 모델의 user_id 필드가

# photo.rb 
class Photo < ActiveRecord::Base 
    belongs_to :attachable, :polymorphic => true, :counter_cache => true 
    belongs_to :user, :counter_cache => true 
    attr_accessible :data, :attachable_id, :attachable_type, :user_id 
end 

# shop.rb 
class Shop < ActiveRecord::Base 
    attr_protected :photos_count 
    has_many :photos, :as => :attachable, :dependent => :destroy 
    accepts_nested_attributes_for :photos, :allow_destroy => true 
end 

# photos_controller.rb 
class PhotosController < ApplicationController 
end 

# shops_controller.rb 
class ShopsController < ApplicationController 
    before_filter :require_user, :only => [:new, :edit, :update, :create] 

    ... 

    def update 
    @shop = Shop.find(params[:id]) 
    if @shop.update_attributes(params[:shop]) 
     flash[:notice] = 'Successfully updated.' 
     redirect_to shop_path(@shop) 
    else 
     render :action => :edit 
    end 
    end 
end 

: 여기

코드 내 다른 부분입니다. 현재 user_id은 새로운 각 Photo 레코드에 저장되지 않습니다. shops_controller.rb에서 파일 업로드 배열에 user_id을 포함하려면 어떻게해야합니까? 그것이 보안을 노출하기 때문에 양식에서 그것을하고 싶지 않아요.

감사합니다. 폼에 필드를 추가하려면 shops_controller.rb

def update 
    @shop = Shop.find(params[:id]) 

    photos = params[:shop][:photos_attributes] 

    if !photos.blank? 
    photos.each do |photo| 
     photo.merge!(:user_id => current_user.id) 
    end 
    end 

    if @shop.update_attributes(params[:shop]) 
    flash[:notice] = 'Successfully updated.' 
    redirect_to shop_path(@shop) 
    else 
    render :action => :edit 
    end 
end 
+0

일반적으로 모호하게 보안을 실행하는 것은 좋지 않습니다. 단지 내가 말하는 것과 같은 형식으로 추가하십시오. – 8vius

+0

@ 8vius, 추가하는 방법? – Victor

+0

'@ photo.user.id'를 통해'user_id'에 접근 할 수 없습니까? 사진은 사용자에게 속합니다 –

답변

0

넣어이 같은 숨겨진 필드를 사용

<%= hidden_field_tag "user", @user.id %> 

을 다음 컨트롤러에서이처럼 액세스 할 수 있습니다

params[:user]