如何在 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]
。例如在 PrescriptionController
的 create
方法中:
def create
hospitalization = Hospitalization.find(params[:hospitalization])
prescription = Prescription.new(hospitalization: hospitalization, ...)
# ...
end
在不使用会话的情况下,应该使用什么通过不同的控制器#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]
。例如在 PrescriptionController
的 create
方法中:
def create
hospitalization = Hospitalization.find(params[:hospitalization])
prescription = Prescription.new(hospitalization: hospitalization, ...)
# ...
end