2013-02-24 18 views
6

Próbowałem dla uploadify z carrierwave, aby obsługiwać multiple file upload, ale daje mi ten błąd GET http://localhost:3000/users/uploadify.swf?preventswfcaching=1361694618739. Zasadniczo jedna osoba nazywa się model jako user. W przypadku pojedynczego przesyłania działa dobrze z falą nośną, ale w przypadku wielu plików nie jest.przesłanie błędu podczas korzystania z usługi carrierwave i przesłanie

I ve po samouczek this. W 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> 

ja używam mongoid więc model jest jak ten

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

    mount_uploader :image, ImageUploader 
end 

ja nie otrzymuję co jest błędem. Proszę pomóż mi.

+0

Wysłałeś tylko żądanie GET, a nie faktyczny błąd. Opublikuj błąd. – Jesper

+0

to błąd, który dostaję w konsoli js. W rzeczywistości przycisk przeglądania plików nie działa. –

+0

Należy zrozumieć, że 'GET http: // localhost: 3000/users/uploadify.swf? Preventwfcaching = 1361694618739' nie jest błędem, jest po prostu instrukcją. Podaj nam faktyczny błąd. – Jesper

Odpowiedz

1

Oto kompletne rozwiązanie do przesyłania wielu obrazów z Carrierwave: Aby wykonać te czynności, wykonaj następujące czynności.

rails new multiple_image_upload_carrierwave 

W pliku gem

gem 'carrierwave' 

Następnie uruchom następujące

bundle install 
rails generate uploader Avatar 

Tworzenie pocztowy rusztowanie

rails generate scaffold post title:string 

Tworzenie post_attachment rusztowanie

rails generate scaffold post_attachment post_id:integer avatar:string 

Następnie uruchom

rake db:migrate 

W post.rb

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

W post_attachment.rb

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

W 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 

w widokach/postów/_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 %> 

Aby edytować przywiązanie i listę przywiązania do jakiegokolwiek postu. W widokach/postów/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 %> 

forma Aktualizacja edytować widoki mocowania/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 %> 

Zmienić sposób zmiana w 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 

W szynach 3 nie ma potrzeby definiowania silnych parametrów i można zdefiniować atrybut_accessible w obu modelach i accept_nested_attribute na model postu, ponieważ atrybut jest dostępny jest przestarzały w szyny 4.

Do edycji załącznika nie można modyfikować wszystkich załączników naraz. więc wymienimy załącznik jeden po drugim lub możesz go zmodyfikować zgodnie z regułą. Tutaj pokażę ci, jak zaktualizować załącznik.

+1

Późno, ale dziękuję za odpowiedź !!! –

+0

Czy ta odpowiedź rozwiązała Twój problem, czy potrzebujesz więcej informacji? –

+0

Nie zapomniałeś oznaczyć to –