2013-09-11 4 views
0

У меня есть простое приложение, которое использует Ajax с модальным, чтобы добавлять и обновлять записи в обычном представлении таблицы.Rails: обновление записи с использованием ujs

У меня есть новые записи, которые просто добавили новую строку/запись таблицы в нижнюю часть таблицы, но мне трудно понять, как показать изменения после обновления существующей записи. Вот код:

update.js.erb

console.log('Updated'); 
    $('#dialog-form').dialog('close'); 
    $('#dialog-form').remove(); 
    $('table').update record somehow? 

Обычно я хотел бы сделать что-то вроде

$(this).closest('tr').remove(); 
$(this).closest('tr').append('whatever'); 

, но это не будет работать, так как кнопка обновления в модальном , а не в фактической таблице.

Для справки, вот как я добавляю новый рекорд:

create.js.erb

console.log('Created'); 
    $('#dialog-form').dialog('close'); 
    $('#dialog-form').remove(); 
    $('table').append('<%= escape_javascript(render(@exercise)) %>'); 
    $('tr').last('tr').effect('highlight'); 

ответ

1

Вы можете сделать это следующим образом:

# index.html.erb 
<table> 
    <tbody> 
    <% @exercises.each do |exercise| %> 
     <tr id="exercise_<%= exercise.id %>"> 
     <td><%= exercise.name %></td> 
     # etc... 
     </tr> 
    <% end %> 
    </tbody> 
</table> 

# update action in controller: 
def update 
    @exercise = Exercise.where(id: params[:id]).first 
    @exercise.update_attributes(params[:whatever]) 
    # etc ... 

# update.js.erb 
console.log('Updated'); 
$('#dialog-form').dialog('close'); 
$('#dialog-form').remove(); 
$('table tr#exercise_<%= @exercise.id %>').replaceWith('<%= escape_javascript(render(@exercise)) %>'); 

Надеется, что это помогает! Не стесняйтесь поинтересоваться об этом

+0

Спасибо! Что такое часть контроллера? – Arel

+0

Ничего, здесь, чтобы показать вам, что я использую переменную '@ exercise' в update.js.erb, что делает действие Update? – MrYoshiji

+0

Ох. Я думал, что вы добавляете что-то к действию контроллера. Мое действие обновления просто выглядит следующим образом: '@exercise = Exercise.find (params [: id])', за которым следует блок ответа. – Arel

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