Rails:使用ujs更新记录

时间:2013-09-11 14:38:34

标签: javascript ruby-on-rails ujs

我有一个简单的应用程序,它使用带有模式的Ajax在常规表视图中添加和更新记录。

我通过将新表行/记录附加到表格的底部来添加新记录,但在更新现有记录后无法确定如何显示更改。这是一些代码:

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 个答案:

答案 0 :(得分: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)) %>');

希望这有帮助!随意询问有关此问题的任何问题