link_to 助手未定义的方法

Undefined method by link_to helper

我需要通过 link 标签 post,但是 link 助手有问题。这是我的 link 标签

// doctors.html.erb
<%= link_to "Ekle", [:add_doctor, @patient], method: :post %> 

还有我的routes.rb

// routes.rb 
get    'patients/:id/doctors' => 'patients#get_doctors'
post   'patients/:id/doctors' => 'patients#add_doctor'

我收到错误

#<#:0x007fd39283a4b0>

的未定义方法“add_doctor_patient_path”

我应该如何使用 link 助手来解决这个问题?

只需在路由中添加一个 as: 选项即可。

// routes.rb 
get    'patients/:id/doctors' => 'patients#get_doctors',as: :patient_get_doctor
post   'patients/:id/doctors' => 'patients#add_doctor', as: :patient_add_doctor

然后在视图中:

// doctors.html.erb
<%= link_to "Ekle", patient_add_doctor_path(id: @patient.id), method: :post %> 

routes.rb 中的这一行表明您有一个 get_doctors 路由接受一个参数,:id:

get 'patients/:id/doctors' => 'patients#get_doctors'

这意味着您应该使用相应的路径助手,get_doctors_path,并将 Patient 对象传递给它:

<%= link_to "Ekle", get_doctors_path(@patient), method: :post %> 

P.S。你的路线令人费解,因为你可以通过使用足智多谋的路线 as recommended by the Rails Guides 来完成同样的事情,而不是定义你自己的自定义 getpost 路线,这样做可以节省很多麻烦:

resources :patients do
  resources :doctors
end

这将创建例如patient_doctors_pathnew_patient_doctor_path 路径助手,它们将分别自动路由到您的 DoctorsController#getDoctorsController#new 方法,并且它将使您能够使用例如form_for [ @patient, :doctor ]。 PatientsController 是放置用于检索和修改 Doctors 的逻辑的非常错误的地方。