Javascript Rails:使用ujs更新记录

Javascript Rails:使用ujs更新记录,javascript,ruby-on-rails,ujs,Javascript,Ruby On Rails,Ujs,我有一个简单的应用程序,它使用带有模式的Ajax在常规表视图中添加和更新记录 我只需将新表行/记录追加到表的底部,就可以添加新记录,但我很难确定更新现有记录后如何显示更改。下面是一些代码: update.js.erb console.log('Updated'); $('#dialog-form').dialog('close'); $('#dialog-form').remove(); $('table').update record somehow? console.l

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

我只需将新表行/记录追加到表的底部,就可以添加新记录,但我很难确定更新现有记录后如何显示更改。下面是一些代码:

update.js.erb

  console.log('Updated');
  $('#dialog-form').dialog('close');
  $('#dialog-form').remove();
  $('table').update record somehow?
  console.log('Created');
  $('#dialog-form').dialog('close');
  $('#dialog-form').remove();
  $('table').append('<%= escape_javascript(render(@exercise)) %>');
  $('tr').last('tr').effect('highlight');
通常我会这样做

$(this).closest('tr').remove();
$(this).closest('tr').append('whatever');
但这不起作用,因为update按钮处于模式中,而不在实际的表中

以下是我如何添加新记录以供参考:

create.js.erb

  console.log('Updated');
  $('#dialog-form').dialog('close');
  $('#dialog-form').remove();
  $('table').update record somehow?
  console.log('Created');
  $('#dialog-form').dialog('close');
  $('#dialog-form').remove();
  $('table').append('<%= escape_javascript(render(@exercise)) %>');
  $('tr').last('tr').effect('highlight');
console.log('Created');
$(“#对话框形式”).dialog('close');
$(“#对话框形式”).remove();
$(“表”)。追加(“”);
$('tr')。最后('tr')。效果('highlight');

您可以这样做:

# 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)) %>');
#index.html.erb
#等等。。。
#控制器中的更新操作:
def更新
@exercise=exercise.where(id:params[:id])。首先
@更新_属性(参数[:whatever])
#等等。。。
#update.js.erb
console.log('Updated');
$(“#对话框形式”).dialog('close');
$(“#对话框形式”).remove();
$(‘表tr#练习’)。替换为(“”);

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

谢谢!控制器部分在做什么?没什么,它在这里向您展示我在update.js.erb中使用
@exercise
变量,您的更新操作做什么?哦。我以为你在控制器动作中添加了一些东西。我的更新操作如下所示:
@exercise=exercise.find(params[:id])
,后跟响应块。我正在尝试。我无法更新特定的tr。我需要在tr标签上添加一个练习id吗?没关系!我对您的html示例进行了详细介绍。给我一秒钟来编辑我的代码。