Rails Helper方法构建关联

时间:2015-01-13 18:00:03

标签: ruby-on-rails ruby

我已经从前一段时间存储过的示例(来自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"作为患者模型的一个实例。我在模型上做错了什么,或者在控制器的错误位置调用它?

提前致谢。

1 个答案:

答案 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上存储cu​​rrent_patient实例要多一些代码,但最好是在会话上保存较少的数据只是 id而不是整个实例。