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
일반적으로 모호하게 보안을 실행하는 것은 좋지 않습니다. 단지 내가 말하는 것과 같은 형식으로 추가하십시오. – 8vius
@ 8vius, 추가하는 방법? – Victor
'@ photo.user.id'를 통해'user_id'에 접근 할 수 없습니까? 사진은 사용자에게 속합니다 –