如何链接到某个操作?

时间:2013-06-27 15:54:47

标签: ruby-on-rails ruby-on-rails-3

当时我有两个模型:患者(有很多)和治疗(属于​​)。

到目前为止,我在患者展示页面上显示了新治疗的表格,并且一切正常。但现在我想将治疗表格外包给新页面。更好地可视化:

 <%= render "treatments/form" %>

更改为:

 <% link_to "new", "treatments/form" %>

所以我的问题是我总是成为路线错误:

 No route matches [GET] "/patients/treatments/form"

但路线看起来如此,我认为它们会起作用:

resources :patients do
  resources :treatments
  resources :paintings
end

治疗的控制者:

class TreatmentsController < ApplicationController
def create
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.create(params[:treatment])
    redirect_to patient_path(@patient)
end

def destroy
    @patient = Patient.find(params[:patient_id])
    @treatment = @patient.treatments.find(params[:id])
    @treatment.destroy
    redirect_to patient_path(@patient)  
end
end   

1 个答案:

答案 0 :(得分:1)

由于您提议的form实际上只是一种创建新患者治疗的方法,因此您应该考虑遵循RESTful约定并创建一个名为TreatmentsController的新new操作:

# app/controllers/treatments_controller.rb
class TreatmentsController < ApplicationController
def new
    @patient = Patient.find(params[:patient_id])
end

由于您的治疗路线是患者嵌套资源路线的嵌套资源,因此您需要将patient_id传递给您的链接助手:

<%= link_to "New Patient Treatment", new_patient_treatment_path(@patient) %>

这将使您能够正确访问treatment#new的嵌套路由。