2015-07-21 2 views
0

Итак, у меня есть две модели. Услуги и доступность. У каждого объекта есть много возможностей. На странице моих объектов у меня есть частичная информация о всех доступных для текущего объекта.Обновление или обновление партитуры

Я пытаюсь разрешить операции CRUD с доступностью. Удалить работает нормально, я делаю это через ajax и использую jquery для удаления строки в таблице.

У меня возникли проблемы с созданием и обновлением. Я могу сделать их удаленно, но отражая изменение без перезагрузки страницы, было сильно.

Это то, что парциальное выглядит like:

<tbody class="availabilityContainer"> 
    <% facility_availabilities?.each do |a|%> 
    <tr id="availability_<%= a.id %>"> 
     <td id="date_<%= a.id %>"><%= a.start_time.strftime("%a, %b %d %Y") %></td> 
     <td id="time_<%= a.id %>"><%= a.start_time.strftime("%I:%M %p") %> - <%= a.end_time.strftime("%I:%M %p") %></td> 
     <td id="price_<%= a.id %>"><%= number_to_currency a.price %></td> 
     <td id="discount_<%= a.id %>"><%= number_to_percentage a.discount, precision: 0 %></td> 
     <td> 
      <!-- Purchase button --> 
      <%= link_to("<i class='fa fa-shopping-cart'></i>".html_safe, "#", class:"btn btn-xs btn-success") %> 

      <!-- Edit button --> 
      <!-- <button type="button" class="btn btn-xs btn-primary" data-toggle="modal" data-target="#editAvailability"><i class='fa fa-pencil'></i></button> --> 
      <%= link_to("<i class='fa fa-pencil'></i>".html_safe, edit_availability_path(a.id) , class:"btn btn-xs btn-primary", data:{toggle:"modal", target:"#editAvailability"}, remote: true) %> 

      <!-- Delete button --> 
      <%= link_to("<i class='fa fa-times'></i>".html_safe, availability_path(a.id), method: :delete, class:"btn btn-xs btn-danger", remote: true) %> 
     </td> 
    </tr> 
    <!-- Load Edit Availability Form --> 
    <div class="modal fade" id="editAvailability" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"></div> 
    <% end %> 
</tbody> 

Я пробовал некоторые вещи в JS:

// Hide modal on update 
$("#editAvailability").modal("hide"); 

// Update view 
$("#availability_&lt;%= @availability.id %&gt;").fadeOut(500,function(){ 
    currentItem = $(this) 
    // Get the new object from the database (should just get it from the form but i'm committed now) 
    $.get('/availabilities/&lt;%= @availability.id %&gt;', function (data){ 
    // Append new data to table or refresh partial somehow 
    }).done(function() { 
     // update the individual row and fade back in? 
     $("#availability_&lt;%= @availability.id %&gt;").fadeIn(500) 
    }) 
}); 

ответ

0

Я думаю, что вы смешано два различных подхода и запутанным из-за него. Первый подход просто добавляет строку в таблицу после чистого js-запроса.

$.get("ajax_address", function(data){ 
    $("<tr><td>you new row</td></tr>").appendTo("#table_id"); 
} 

Вы также можете цепной эффект анимации для вас appendTo, как

$("some").appendTo("#table").hide().fadeIn('slow'); 

Второй вариант, чтобы сделать его более рельсов пути. Вы просто создаете ссылку с remote: true и пишете логику размещения в своем представлении js (почти так же, как функция обратного вызова первого решения)

+0

Если каждая ячейка 'td' имеет идентификатор, было бы проще отредактировать innerHtml для этих ячеек вместо создания новой строки? Я спрашиваю, потому что в каждой строке много кода кнопки, я не хочу воссоздавать через jQuery – Batman

+0

Я написал о 'create' action. Как я понимаю, вы создаете новую строку в этом случае, верно ?. Об обновлении - '$ (" # td_id "). Html (" новый контент ")' должен работать – Cyrill

+0

Да, мне нужно как создавать, так и обновлять, поэтому ваш ответ извините. У меня проблема, если я сделаю что-то вроде этого '$ (" td # date _ <% = @ availability.id%> "). Html (" <% = @ availability.start_time.strftime ('% a, % b% d% Y ')%> ")' Я получаю сообщение об ошибке: 'Uncaught Error: Синтаксическая ошибка, непризнанное выражение: #availability_ <% = @ availability.id% >' – Batman

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