Итак, в моем проекте rails у меня есть класс Patient, в котором есть один класс Лечение. Этот класс лечения имеет много DrNotes внутри него. Я все еще довольно новичок в рельсах, и я знаю, что это глубоко не рекомендуется в Rails, но я продолжаю использовать этот метод.
Моя проблема с редактированием DrNotes. Поскольку в процессе лечения есть много записей о врачах, я пытаюсь редактировать только одну конкретную заметку. Я использую Form_for для передачи параметров на заметку врача. Когда я отправляю форму, она перенаправляет меня на страницу, которая должна отображаться только после успешного завершения функции обновления. Однако ни одна из заметок фактически не обновляется, и при попытке выполнить обновление не выдается никаких ошибок.
Вот эти модели:
patient.rb
class Patient < ApplicationRecord
has_one :treatment, dependent: :destroy
accepts_nested_attributes_for :treatment, update_only: true
end
treatment.rb
class Treatment < ApplicationRecord
belongs_to :patient
has_many :dr_notes, class_name: "DrNote",
foreign_key: "treatment_id", dependent: :destroy
accepts_nested_attributes_for :dr_notes
end
dr_note.rb
class DrNote < ApplicationRecord
belongs_to :treatment
end
В моем контроллере у меня есть:
Функция редактирования «Докторской записки»
def edit_dr_note
@patient = Patient.find(params[:patient_id])
@dr_note = @patient.treatment.dr_notes.find(params[:dr_id])
@dr_note.update if @dr_note.nil?
end
Функция обновления «Докторской записки»
def update_dr_note
@patient = Patient.find(params[:patient_id])
@dr_note = @patient.treatment.dr_notes.find(params[:dr_id])
if @dr_note.update(dr_note_params)
redirect_to page_path(@patient)
else
flash.now[:error] = "Cannot update Doctor's notes"
render 'edit_dr_note'
end
end
Параметры врачебной записки
def dr_note_params
params.require(:dr_note).permit(:id, :name, :message)
end
У меня есть: id в params.permit, потому что из исследований я слышал, что вам нужно включить его при обновлении моделей, но я не уверен, нужно ли это здесь.
У меня есть следующий код вways.rb
get '/pages/:patient_id/treatment/edit/edit_dr_note/:dr_id', to: 'pages#edit_dr_note', as: :edit_dr_note
match "pages/:patient_id/treatment/update/update_dr_note/:dr_id" => "pages#update_dr_note", as: :update_dr_note, via: [:patch, :post]
А в edit_dr_note.html.erb
<%= form_for @patient.treatment.dr_notes.find(params[:dr_id]), url: update_dr_note_path do |patient_form| %>
<% @patient.treatment.dr_notes.each do |doctor| %>
<% if doctor.id == @dr_note.id %> #Only displays the fields for the desired note
<%= patient_form.fields_for :dr_note, doctor do |doctor_fields| %>
Name: <%= doctor_fields.text_field :name %>
Message: <%= doctor_fields.text_field :message %>
<% end %>
<p>
<%= patient_form.submit %>
</p>
<% end %>
<% end %>
<% end %>
Любая помощь будет принята с благодарностью. Спасибо!