2016-04-05 9 views
0

В моих rails4 я хотел бы отправить форму через AJAX, у которой есть файл, загруженный через carrierwave. Насколько я знаю, это можно сделать через remotipart, но не могу понять, как я могу это сделать. (Remotipart установлен правильно, так как он работает с REFILE драгоценным камнем, который я также использовать в приложении.)carrierwave AJAX upload with remotipart

С текущим кодом ниже форме получает представленный в соответствии с бревнами и говорит create.js.erb визуализируется, но код в create.js.erb файл никогда не запускается.

Rendered posts/create.js.erb (387.0ms) 

Что мне делать?

форма

<%= form_for @post, remote: true, method: :post, :html => { :multipart => true, class: "post-create-form" } do |f| %> 
    <img id="img_prev" style="margin-bottom:10px;" width=300 height=200 src="#" class="img-thumbnail hidden"/> 
    <%= f.text_area :body, placeholder: "Share something useful..", class: "form-control post-create-body" %> 
    <%= f.button "SHARE", class: "btn btn-primary btn-sm btn-create-post", data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Saving..."} %> 
    <span class="btn btn-success btn-sm btn-message-file">Upload Image 
    <%= f.file_field :post_image, class: "choose-message-file", id: "avatar-upload" %> 
    </span> 
    <%= f.hidden_field :post_image_cache %> 
<% end %> 

create.js.erb

$('ul.errors').hide(); 
$('.alert-danger').hide(); 
$('.post-index').prepend('<%= j render @post %>'); 
$('.post-create-body').val(''); 
$('.btn-create-post').prop('disabled',true); 

_post.html.erb

<div class="col-md-2"> 
     <%= link_to user_path(post.user) do %> 
     <%= image_tag post.user.avatar.url(:base_thumb), class: 'post-avatar' %> 
     <% end %> 
    </div> 

    <div class="col-md-8"> 
     <div class="post-info"> 
     <%= link_to user_path(post.user) do %> 
      <span class="post-user-name"><%= post.user.full_name %></span> 
     <% end %> 
     <span class="post-updated"><%= local_time_ago(post.updated_at) %></span> 
     </div> 
     <div class="post-body"> 
     <%= simple_format(find_links(h post.body)) %> 
     </div> 
     <div class="post-image" data-postlink="<%= post_path(post) %>"> 
     <% if post.post_image? %> 
      <button data-toggle="modal" data-target="#post-image-modal"> 
      <%= image_tag post.post_image.url(:base_thumb) %> 
      </button> 
     <% end %> 
     </div> 
    </div> 

ОБНОВЛЕНИЕ: Проблема связана с обновлением пост объекта. Код формы обновления можно найти в _post.html.erb, поэтому <%= j render @post %> не работал. Все еще не знаю, в чем проблема.

Так что работают: 1. Создание поста, который не имеет изображения 2. Обновление сообщения, которое не имеет изображения 3. Обновление поста, который имеет изображение, но изображение не отредактированный Не работает: 1. Создание поста, который имеет изображение 2. обновление пост, который имеет изображение, которое редактируется

<%= form_for post, method: :patch, remote: true, :html => { :multipart => true } do |f| %> 
    <div class="modal fade updatepost" id="updatepost_<%= post.id %>" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> 
    <div class="modal-dialog" role="document"> 
     <div class="modal-content" style="text-align:left"> 
     <div class="modal-header"> 
      <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button> 
      <h4 class="modal-title" id="edittaskmodalohhhhh">Edit Task</h4> 
     </div> 
     <div class="modal-body"> 
      <div class="alert alert-danger" style="display:none"> 
      <ul class="errors" style="display:none"> 
       <%= render 'layouts/error_messages', object: f.object %> 
      </ul> 
      </div> 
      <div class="field form-group"> 
      <%= f.file_field :post_image, id: "avatar-upload-update" %> 
      <%= f.hidden_field :post_image_cache %> 
      </div> 
      <div class="field form-group"> 
      <%= f.text_area :body, class: "form-control edit-post-body" %> 
      </div> 
     </div> 
     <div class="modal-footer"> 
      <button type="button" class="btn btn-default" data-dismiss="modal" id="updatepostclose">Close</button> 
      <%= f.button "Update post", class: 'btn btn-primary edit-post-submit', data: {disable_with: "<i class='fa fa-spinner fa-spin'></i> Saving..."} %> 
     </div> 
     </div> 
    </div> 
    </div> 
<% end %> 

update.js.erb

$("ul.errors").html(""); 
<% if @post.errors.any? %> 
    $('.alert-danger').show(); 
    $('ul.errors').show(); 
    <% @post.errors.full_messages.each do |message| %> 
    $("ul.errors").append($("<li />").html("<%= message.html_safe %>")); 
    <% end %> 
<% else %> 
    $('ul.errors').hide(); 
    $('.alert-danger').hide(); 
    $('#updatepost_<%= @post.id %>').modal('hide'); 
    $post = $('<%= j render @post %>'); 
    editPostHideDanger($post); 
    $('#post_<%= @post.id %>').remove(); 
    $(".new-post-insert").prepend($post); 
    $("html, body").animate({ scrollTop: 0 }, "slow"); 
<% end %> 
+0

В вашей форме нет ': html => {: multipart => true}'. Попробуйте добавить это. '<% = form_for @post, remote: true, method:: post, class:" post-create-form ",: html => {: multipart => true} do | f | %> ' – dp7

+0

dkp, это не помогло :( –

+0

вы можете отправить трассировку стека после отправки формы? – dp7

ответ

0

Там ш как некоторые проблемы (до сих пор не знаю, что) с модами bootstrap. Я изменил структуру модалов, и теперь он работает нормально.