如何在部分表单中更新Rails ActiveDirectory记录?

时间:2019-04-09 03:47:05

标签: javascript html ruby-on-rails rails-activerecord

我正在尝试呈现部分表单来替换表的一行,以编辑ActiveRecord对象,然后将其保存到位。表单可以正确呈现,但是当我单击“更新对象”按钮时,什么也没有发生。我最好的猜测是,我没有在对象的上下文中准确地渲染局部。有人可以帮忙吗?

我尝试更改在javascript中引用对象的方式,该javascript调用我能想到的每个迭代的局部函数,并且没有来自rails的响应。

请注意-这与这一问题(Rails - Rendering an edit form partial within another partial)非常相似,但是没有人回答。我是堆栈溢出的新手,无法解决该问题,所以我创建了一个问题,希望它将得到解决。我已经坚持了好几天!

我的程序是一个时间管理跟踪系统。每个“跟踪器”都是一天中完成的离散任务。所有跟踪器都显示在一个表中,我希望能够对其进行编辑。

  1. 在表格中显示跟踪器的索引页:
<table id="trackers">
  <thead>
    <tr>
      <th>Day</th>
      <th>Task</th>
      <th>Subtask</th>
      <th>Description</th>
      <th>Hours</th>
      <th>Start time</th>
      <th>End time</th>
      <th>Payment</th>
      <th colspan="2"></th>
    </tr>
  </thead>
  <tbody>
    <% @trackers.each do |tracker| %>
      <tr id=<%=tracker.id%>>
        <td><%= tracker.date.strftime("%a #{tracker.date.day.ordinalize}") %></td>
        <td><%= tracker.task %></td>
        <td><%= tracker.subtask_1 %></td>
        <td><%= tracker.subtask_2 %></td>
        <td><%= tracker.hours %></td>
        <td><%= tracker.start_time.strftime("%H:%M") %></td>
        <td><%= tracker.end_time.strftime("%H:%M") %></td>
        <td><%= tracker.payment %></td>
        <td><%= link_to "Edit", edit_track_path(:id => tracker.id), :remote => true %>
        <td><%= link_to 'Destroy', tracker, method: :delete, data: { confirm: 'Are you sure?' } %></td>
      </tr>
    <% end %>
  </tbody>
</table>
  1. 单击“编辑”按钮时,它会通过以下路径运行:
 get "/edit_track" => 'trackers#edit_track', as: 'edit_track'
  1. 此路径位于跟踪器控制器中:
def edit_track
  @tracker = Tracker.find(params[:id])
  respond_to do |format|
    format.js
  end
end
  1. 在跟踪器模型中,我创建了一个名为edit_track.js.erb的文件。该文件由控制器方法中的“ format.js”命令调用。
$("#<%=@tracker.id%>").html("<%=j render partial: 'trackers/edit', :locals => {:tracker=>@tracker}%>");
  1. 在跟踪器模型中,我创建了一个名为_edit.html.erb的文件。这是我的部分表格。
<%= form_for @tracker, :url=>tracker_update_path, method: :post do |form|%>
  <td>
    ...input fields for form
  </td>
  <td><%=form.submit %></td>
<% end %>
  1. 必须将form.submit 转到tracker_update路由,该路由定义如下:
get '/tracker_update', to: 'trackers#update_tracker', as: 'tracker_update'

但是Rails服务器终端中没有任何显示,因此我认为它没有用。

  1. 这是跟踪器控制器中的update_tracker方法:
def update_tracker
  @tracker.update(tracker_params)
end

'tracker_params'是在trackers控制器的私有方法中定义的:

def tracker_params
  params.require(:tracker).permit(:date, :task, :subtask_1, :subtask_2, :hours, :start_time, :end_time, :payment, :month)
end

表单partial中的form.submit按钮应使用表单partial中指定的新字段来更新ActiveRecord对象。这没有发生。我从Rails服务器获得的最后信息是部分渲染正确:

Started GET "/edit_track?id=373" for ::1 at 2019-04-08 22:40:35 -0500
Processing by TrackersController#edit_track as JS
  Parameters: {"id"=>"373"}
  Tracker Load (0.2ms)  SELECT  "trackers".* FROM "trackers" WHERE "trackers"."id" = ? LIMIT ?  [["id", 373], ["LIMIT", 1]]
  ↳ app/controllers/trackers_controller.rb:32
  Rendering trackers/edit_track.js.erb
  Rendered trackers/_edit.html.erb (2.6ms)
  Rendered trackers/edit_track.js.erb (5.3ms)
Completed 200 OK in 14ms (Views: 11.2ms | ActiveRecord: 0.2ms)

0 个答案:

没有答案