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

时间:2015-02-06 12:50:20

标签: ruby-on-rails ruby ruby-on-rails-4

如果不使用会话,应该使用什么来通过不同的控制器#操作来保存实例变量?

以下是问题的一个示例:

住院 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 回答 nil
@prescription = @hospitalization.build_prescription(prescription_params)

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

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

1 个答案:

答案 0 :(得分:0)

以这种方式使用neseted resources

resources hospitalizations do
  resource :prescription
end

这样你的路径看起来像这样:

/hospitalizations/:hospitalization_id/prescription

您可以使用以下内容生成它:

new_hospitalization_prescription_path(@hospitalization)

现在您可以在控制器中以params[:hospitalization_id]的形式访问参数。例如,在create的{​​{1}}方法中:

PrescriptionController