如何在 Rails 中通过不同的 Rails 控制器操作保留参数

How To Persist Parameters Through Different Rails Controllers Actions In Rails

在不使用会话的情况下,应该使用什么通过不同的控制器#actions 来持久化实例变量?

这里是问题的一个例子:

有一个住院治疗 has_one 处方

来自住院治疗#show 我有一个 link_to 处方#new 具有如下所示的附加参数:

<%= link_to t('hospitalizations.prescription'), new_prescription_path(hospitalization_id: @hospitalization.id,...)

诀窍是:在处方#new 我可以检索

@hospitalization = Hospitalization.find_by(id: params[:hospitalization_id])

但是当我按下提交并进入处方#create 时,@hospitalization 在尝试执行类似

@prescription = @hospitalization.build_prescription(prescription_params)

如何最好地实例化这些参数,以便它们在需要的控制器#actions 之间持久存在或轻松携带?我应该如何实例化所属模型处方?我应该把 ID 直接放在那里,在 prescription#new 上吗?喜欢:

@prescription = Prescription.new(hospitalization_id: params[:hospitalization_id])

这样使用neseted resources

resources hospitalizations do
  resource :prescription
end

这样您的路径将如下所示:

/hospitalizations/:hospitalization_id/prescription

您可以使用以下方法生成它:

new_hospitalization_prescription_path(@hospitalization)

现在在您的控制器中,您可以访问参数 params[:hospitalization_id]。例如在 PrescriptionControllercreate 方法中:

def create
  hospitalization = Hospitalization.find(params[:hospitalization])
  prescription = Prescription.new(hospitalization: hospitalization, ...)
  # ...
end