我已经从前一段时间存储过的示例(来自railstutorial)改编了这个,但是它无法正常工作:
我患者 有很多 住院,我尝试实施辅助方法来存储最后一位患者显示(在节目动作上),以便我可以通过以下方式设法为该患者创建新的住院治疗:
@hospitalization = current_patient.hospitalizations.new(hospitalization_params)
并且一直在尝试使用这些辅助方法:
module PatientsHelper
def current_patient=(patient)
@current_patient = patient
end
def current_patient
@current_patient
end
end
并在我的patient_controller上调用那些
def show
@patient = Patient.find(params[:id])
current_patient = @patient
end
最后我收到了这个错误:
未定义的方法`住院治疗'为零:NilClass 这是错误指向的地方:
def create
@hospitalization = @current_patient.hospitalizations.new(hospitalization_params)
if @hospitalization.save
at hospitalizations_controller.rb
我想知道为什么它不能识别" current_patient"作为患者模型的一个实例。我在模型上做错了什么,或者在控制器的错误位置调用它?
提前致谢。
答案 0 :(得分:0)
听起来你正试图将current_patient
从一个请求持久存储到另一个请求。这只能通过传递params或将患者存储在会话中。我就是这样做的:
def current_patient=(patient)
session[:current_patient_id] = patient.id
@patient = patient
end
def current_patient
return @patient if @patient && @patient.id == session[:current_patient_id]
@patient = Patient.find(session[:current_patient_id])
end
这可能比在sesison上存储current_patient实例要多一些代码,但最好是在会话上保存较少的数据只是 id而不是整个实例。