我正在尝试呈现部分表单来替换表的一行,以编辑ActiveRecord对象,然后将其保存到位。表单可以正确呈现,但是当我单击“更新对象”按钮时,什么也没有发生。我最好的猜测是,我没有在对象的上下文中准确地渲染局部。有人可以帮忙吗?
我尝试更改在javascript中引用对象的方式,该javascript调用我能想到的每个迭代的局部函数,并且没有来自rails的响应。
请注意-这与这一问题(Rails - Rendering an edit form partial within another partial)非常相似,但是没有人回答。我是堆栈溢出的新手,无法解决该问题,所以我创建了一个问题,希望它将得到解决。我已经坚持了好几天!
我的程序是一个时间管理跟踪系统。每个“跟踪器”都是一天中完成的离散任务。所有跟踪器都显示在一个表中,我希望能够对其进行编辑。
<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>
get "/edit_track" => 'trackers#edit_track', as: 'edit_track'
def edit_track
@tracker = Tracker.find(params[:id])
respond_to do |format|
format.js
end
end
$("#<%=@tracker.id%>").html("<%=j render partial: 'trackers/edit', :locals => {:tracker=>@tracker}%>");
<%= form_for @tracker, :url=>tracker_update_path, method: :post do |form|%>
<td>
...input fields for form
</td>
<td><%=form.submit %></td>
<% end %>
get '/tracker_update', to: 'trackers#update_tracker', as: 'tracker_update'
但是Rails服务器终端中没有任何显示,因此我认为它没有用。
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)