我目前正在从事一个个人项目,但在试图找出挂钩到请求周期中特定点的最佳方法时遇到了困难。
所以我想要完成的是:从“新”动作(在子对象的控制器内部),如果用户降落在其他任何地方,但“创建”动作作为下一个动作,我想删除关联的父对象。到目前为止,我在想我想编写一个私有方法,如果下一个操作是“创建”以外的任何其他地方,则在父对象上调用销毁作为条件,但我似乎无法找到完全适合我的特定情况的正确回调. 任何人都可以提出一个好的解决方案吗?
这是我对各个控制器的代码。
父控制器:
class EncountersController < ApplicationController
before_action :verify_if_logged_in, :authorize_provider, :set_patient_by_id, :view_all_patient_encounters
def index
@encounter = Encounter.new
end
def create
@encounter = Encounter.new(encounter_params)
@encounter.provider = current_user
@encounter.patient = @patient
if @encounter.save
redirect_to new_patient_encounter_soap_path(@patient, encounter)
else
render :index
end
end
private
def set_patient_by_id
@patient = Patient.find_by(id: params[:patient_id])
end
def view_all_patient_encounters
@encounters = @patient.encounters
end
def encounter_params
params.require(:encounter).permit(:encounter_type)
end
end
子控制器:
class SoapsController < ApplicationController
before_action :set_patient_by_id, :set_encounter_by_id
def new
@soap = SOAP.new
end
def create
#If I don't end up here immediately after the new action for whatever reason
#I want to destroy the newly created parent object
end
private
def set_patient_by_id
@patient = Patient.find_by(id: params[:patient_id])
end
def set_encounter_by_id
@encounter = Encounter.find_by(id: params[:encounter_id])
end
end
一旦我从我的 EncountersController 的创建操作进入我的 SoapsController 的新操作,如果我没有在 Soaps#create 作为我的下一个操作结束,我想销毁关联的 Encounter 对象。