link_to helper的未定义方法

时间:2015-07-27 17:19:39

标签: html ruby-on-rails ruby link-to

我需要通过链接标记发布,但是链接帮助器存在问题。这是我的链接标记

// 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'

我收到错误

#&lt;#:0x007fd39283a4b0&gt;

的未定义方法`add_doctor_patient_path'

我应该如何使用链接助手摆脱问题?

2 个答案:

答案 0 :(得分:1)

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 ]。对于检索和修改医生而言,PatientController非常错误。

答案 1 :(得分:0)

只需在路线上添加一个as:选项即可。

phrase

然后在视图中:

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