2013-02-24 41 views
6

tôi đã cố gắng uploadify với carrierwave để hỗ trợ multiple file upload nhưng nó cho tôi lỗi này GET http://localhost:3000/users/uploadify.swf?preventswfcaching=1361694618739. Về cơ bản tôi đã có một model có tên là user. Đối với tải lên duy nhất nó làm việc tốt với carrierwave nhưng đối với nhiều tập tin nó không phải là.lỗi tải lên khi sử dụng carrierwave và tải lên

Tôi đã theo dõi this hướng dẫn. Trong users/_form.rb

<p> 
<%= f.label "Upload Images"%> 
<%= f.file_field :image, :multiple => true %> 
</p> 

<script type= "text/javascript"> 
$(document).ready(function() { 
<% key = Rails.application.config.session_options[:key] %> 
    var uploadify_script_data = {}; 
    var csrf_param = $('meta[name=csrf-param]').attr('content'); 
    var csrf_token = $('meta[name=csrf-token]').attr('content'); 
    uploadify_script_data[csrf_param] = encodeURI(encodeURIComponent(csrf_token)); 
    uploadify_script_data['<%= key %>'] = '<%= cookies[key] %>'; 

    $('#user_image').uploadify({ 
    uploader  : '<%= asset_path("uploadify.swf")%>', 
    script   : '/images', 
    cancelImg  : '<%= asset_path("uploadify-cancel.png")%>', 
    auto   : true, 
    multi   : true, 
    removeCompleted  : true, 
    scriptData  : uploadify_script_data, 
    onComplete  : function(event, ID, fileObj, doc, data) { 
    } 
    }); 
}); 
</script> 

Tôi đang sử dụng mongoid vì thế mô hình là như thế này

class User 
include Mongoid::Document 
field :name, type: String 
field :description, type: String 
field :image, type: String 

    mount_uploader :image, ImageUploader 
end 

tôi đang không nhận được báo lỗi là gì. Hãy giúp tôi ra.

+0

Bạn chỉ đăng yêu cầu GET, chứ không phải lỗi thực tế. Vui lòng đăng lỗi. – Jesper

+0

nó là lỗi i m nhận được trong giao diện điều khiển js. Trên thực tế nút duyệt tệp không hoạt động. –

+0

Hãy hiểu rằng 'GET http: // localhost: 3000/users/uploadify.swf? Preventwfcaching = 1361694618739' không phải là lỗi, nó chỉ đơn giản là một câu lệnh. Vui lòng cung cấp cho chúng tôi lỗi thực tế. – Jesper

Trả lời

1

Đây là giải pháp hoàn chỉnh để tải lên nhiều hình ảnh với Carrierwave: Để thực hiện theo các bước này.

rails new multiple_image_upload_carrierwave 

Trong tập đá quý

gem 'carrierwave' 

Sau đó chạy sau

bundle install 
rails generate uploader Avatar 

Tạo bài giàn giáo

rails generate scaffold post title:string 

Tạo giàn giáo post_attachment

rails generate scaffold post_attachment post_id:integer avatar:string 

Sau đó chạy

rake db:migrate 

Trong post.rb

class Post < ActiveRecord::Base 
    has_many :post_attachments 
    accepts_nested_attributes_for :post_attachments 
end 

Trong post_attachment.rb

class PostAttachment < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 
    belongs_to :post 
end 

Trong post_controller.rb

def show 
    @post_attachments = @post.post_attachments.all 
end 

def new 
    @post = Post.new 
    @post_attachment = @post.post_attachments.build 
end 

def create 
    @post = Post.new(post_params) 

    respond_to do |format| 
    if @post.save 
     params[:post_attachments]['avatar'].each do |a| 
     @post_attachment = @post.post_attachments.create!(:avatar => a, :post_id => @post.id) 
     end 
     format.html { redirect_to @post, notice: 'Post was successfully created.' } 
    else 
     format.html { render action: 'new' } 
    end 
    end 
end 

private 
    def post_params 
     params.require(:post).permit(:title, post_attachments_attributes: [:id, :post_id, :avatar]) 
    end 

Trong views/bài viết/_form.html.erb

<%= form_for(@post, :html => { :multipart => true }) do |f| %> 
    <div class="field"> 
    <%= f.label :title %><br> 
    <%= f.text_field :title %> 
    </div> 

    <%= f.fields_for :post_attachments do |p| %> 
    <div class="field"> 
     <%= p.label :avatar %><br> 
     <%= p.file_field :avatar, :multiple => true, name: "post_attachments[avatar][]" %> 
    </div> 
    <% end %> 

    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

Để chỉnh sửa một tập tin đính kèm và danh sách các tập tin đính kèm cho bất kỳ đường bưu điện. Trong views/bài viết/show.html.erb

<p id="notice"><%= notice %></p> 

<p> 
    <strong>Title:</strong> 
    <%= @post.title %> 
</p> 

<% @post_attachments.each do |p| %> 
    <%= image_tag p.avatar_url %> 
    <%= link_to "Edit Attachment", edit_post_attachment_path(p) %> 
<% end %> 

<%= link_to 'Edit', edit_post_path(@post) %> | 
<%= link_to 'Back', posts_path %> 

Cập nhật hình thức để chỉnh sửa một lần xem tập tin đính kèm/post_attachments/_form.html.erb

<%= image_tag @post_attachment.avatar %> 
<%= form_for(@post_attachment) do |f| %> 
    <div class="field"> 
    <%= f.label :avatar %><br> 
    <%= f.file_field :avatar %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

phương pháp cập nhật Modify trong post_attachment_controller.rb

def update 
    respond_to do |format| 
    if @post_attachment.update(post_attachment_params) 
     format.html { redirect_to @post_attachment.post, notice: 'Post attachment was successfully updated.' } 
    end 
    end 
end 

Trong đường ray 3 không cần phải xác định thông số mạnh và bạn có thể xác định attribute_accessible trong cả mô hình và accept_nested_attribute thành mô hình bài vì thuộc tính có thể truy cập không được chấp nhận trong đường ray 4.

Để chỉnh sửa tệp đính kèm, chúng tôi không thể sửa đổi tất cả các tệp đính kèm cùng một lúc. vì vậy chúng tôi sẽ thay thế từng tệp đính kèm hoặc bạn có thể sửa đổi theo quy tắc của mình, Ở đây tôi chỉ cho bạn biết cách cập nhật bất kỳ tệp đính kèm nào.

+1

Cuối nhưng cảm ơn bạn đã trả lời !!! –

+0

Câu trả lời này có giải quyết được vấn đề của bạn hay bạn cần thêm thông tin? –

+0

Quên để đánh dấu nó –

Các vấn đề liên quan