Я пытаюсь визуализировать частичную форму, чтобы заменить одну строку таблицы как способ отредактировать объект ActiveRecord и затем сохранить его на месте.Форма отображается правильно, но когда я нажимаю кнопку «Обновить объект», ничего не происходит.Мое лучшее предположение состоит в том, что я не точно отображаю частичное в контексте моего объекта.Кто-нибудь может помочь?
Я пытался изменить способ ссылки на объект в javascript, который вызывает частичное для каждой итерации, о которой я могу думать, и от rails нет ответа.
примечание - это очень похоже на эту проблему ( Rails - визуализация части редактирования в другой части ), но никто не ответил на этот вопрос.Я новичок в переполнении стека и не могу высказать эту проблему, поэтому я создаю вопрос с надеждой на то, что на него ответят.Я застрял на этом в течение нескольких дней!
Моя программа - система отслеживания времени.Каждый «трекер» - это отдельная задача, которая была сделана в течение дня.Все трекеры отображаются в таблице, и я хочу иметь возможность их редактировать.
- индексная страница, на которой трекеры отображаются в таблице:
<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
В модели трекеров я создал файл с именем edit_track.js.erb.Этот файл вызывается командой format.js в методе контроллера.
$("#<%=@tracker.id%>").html("<%=j render partial: 'trackers/edit', :locals => {:tracker=>@tracker}%>");
В модели трекеров я создал файл с именем _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 %>
Form.submit:
предполагается для перехода к маршруту tracker_update, который определяется следующим образом:
get '/tracker_update', to: 'trackers#update_tracker', as: 'tracker_update'
Но в серверном терминале rails ничего не отображается, поэтомуЯ не думаю, что это работает.
А вот метод update_tracker в контроллере трекеров:
def update_tracker
@tracker.update(tracker_params)
end
'tracker_params' определяется в приватном методе в контроллере трекеров:
def tracker_params
params.require(:tracker).permit(:date, :task, :subtask_1, :subtask_2, :hours, :start_time, :end_time, :payment, :month)
end
Кнопка form.submit в частичной форме должна обновить объект 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)