2013-02-24 3 views
6

Я пытался использовать uploadify с carrierwave для поддержки multiple file upload, но он дает мне эту ошибку GET http://localhost:3000/users/uploadify.swf?preventswfcaching=1361694618739. В основном я один model назван как user. Для одиночной загрузки он отлично работает с несущей, но для нескольких файлов это не так.Ошибка загрузки при использовании несущей и добавление

I ve follow this учебник. В 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> 

Я использую Mongoid поэтому модель как этот

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

    mount_uploader :image, ImageUploader 
end 

я не получаю то, что это ошибка. Пожалуйста, помогите мне.

+0

Вы отправили GET-запрос, а не фактическую ошибку. Отправьте сообщение об ошибке. – Jesper

+0

Это ошибка, которую я получаю в консоли js. Фактически, кнопка просмотра файлов не работает. –

+0

Пожалуйста, поймите, что 'GET http: // localhost: 3000/users/uploadify.swf? Preventwfcaching = 1361694618739' не является ошибкой, это просто оператор. Пожалуйста, сообщите нам об ошибке. – Jesper

ответ

1

Полное решение для загрузки нескольких изображений с помощью Carrierwave: Чтобы сделать это, выполните следующие действия.

rails new multiple_image_upload_carrierwave 

В гем файле

gem 'carrierwave' 

Затем запустите следующую

bundle install 
rails generate uploader Avatar 

Создать пост эшафот

rails generate scaffold post title:string 

Создать post_attachment эшафот

rails generate scaffold post_attachment post_id:integer avatar:string 

Затем запустите

rake db:migrate 

В post.rb

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

В post_attachment.rb

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

В 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 

В просмотров/сообщений/_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 %> 

Чтобы редактировать вложение и список вложений для любой должности. В просмотров/сообщений/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 %> 

форма Update для редактирования открывается вид крепления/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 %> 

метод обновления Изменить в 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 

В рельсах 3 нет необходимости определять сильные параметры и как вы можете определить атрибут_accessible как в модели, так и в accept_nested_attribute для публикации модели, поскольку атрибут, доступный, устарел в рельсы 4.

Для редактирования вложения мы не можем изменять все вложения одновременно. поэтому мы заменим приложение по одному или вы можете изменить в соответствии с вашим правилом. Здесь я просто покажу вам, как обновлять любое вложение.

+1

Поздно, но спасибо за ваш ответ !!! –

+0

Помог ли этот ответ решить вашу проблему или вам нужна дополнительная информация? –

+0

Забыл это –

Смежные вопросы