2015-12-08 3 views
0

Я имею дело с вложенными маршрутами, и я почувствовал что-то не хватает, я получаю эту ошибку:Вложенные ресурсы Рельсы маршрут не совпадает с ID = ноль

No route matches {:action=>"edit", :controller=>"consultations", :id=>nil, :patient_id=>#<Patient id: 2 ... 

Маршруты:

resources :patients, shallow: true do 
    resources :consultations 
end 

рейк-маршруты | Grep консультации

patient_consultations GET /patients/:patient_id/consultations(.:format) consultations#index 
POST /patients/:patient_id/consultations(.:format) consultations#create 
new_patient_consultation GET /patients/:patient_id/consultations/new(.:format) consultations#new 
edit_consultation GET /consultations/:id/edit(.:format) consultations#edit 
consultation GET /consultations/:id(.:format) consultations#show 
PATCH /consultations/:id(.:format) consultations#update 
PUT /consultations/:id(.:format) consultations#update 
DELETE /consultations/:id(.:format) consultations#destroy 

Модели:

class Patient < ActiveRecord::Base 
    belongs_to :medic, :foreign_key => :medic_id 
    has_many :consultations, :dependent => :destroy 
    accepts_nested_attributes_for :consultations 
end 

class Consultation < ActiveRecord::Base 
    belongs_to :patient, :foreign_key => :patient_id 
end 

Вид:консультации/index.html.erb

<% @patient.consultations.each do |consultation| %> 
    <%= link_to 'Edit', edit_consultation_path(patient_id: @patient, id: @consultation) %> <---ERROR 
    <%= link_to 'Show', consultation(patient_id: @patient, id: @consultation) %> <---ERROR 
    <%= link_to 'Destroy', consultation, method: :delete, data: { confirm: 'Are you sure?' } %> <---ERROR 
<% end %> 

Am I передавая неправильные параметры edit_consultation_pat h (patient_id: @patient, id: @consultation)?

Любые идеи? заранее спасибо!

редактировать:

Контроллер: контроллер/consultations_controller.rb

def index 
    @patient.consultations = Consultation.all 
end 
+0

вы можете показать свой контроллер? особенно действие индекса? –

ответ

1

Вы уверены, что у вас есть что-то вроде @consultation?

Вы просматриваете все консультации студентов и принимаете каждый экземпляр как consultation.

Тем не менее, вы проходите @consultation как id, что не совпадает с consultation. @consultation в основном ноль.

То, что вы должны передать это consultation, не @consultation, следующим образом:

<% @patient.consultations.each do |consultation| %> 
    <%= link_to 'Edit', edit_consultation_path(patient_id: @patient, id: consultation) %> <---ERROR 
    <%= link_to 'Show', consultation_path(patient_id: @patient, id: consultation) %> <---ERROR 
    <%= link_to 'Destroy', consultation_path(id: consultation.id), method: :delete, data: { confirm: 'Are you sure?' } %> <---ERROR 
<% end %> 

или даже консультации id-х непосредственно, следующим образом:

<% @patient.consultations.each do |consultation| %> 
    <%= link_to 'Edit', edit_consultation_path(patient_id: @patient, id: consultation.id) %> <---ERROR 
    <%= link_to 'Show', consultation_path(patient_id: @patient, id: consultation.id) %> <---ERROR 
    <%= link_to 'Destroy', consultation_path(id: consultation.id), method: :delete, data: { confirm: 'Are you sure?' } %> <---ERROR 
<% end %> 
+0

Я следую вашим советам, но link_to 'Show' получить эту ошибку: undefined method 'consult 'для # <# <Класс: 0x007fa9bcb508e8>: 0x007fa9b91ab9a8>, и если я прокомментирую это link_to' show 'и' delete 'works –

+0

whih one? первый или второй? Вы сказали, что если вы замечаете, что редактирование, показ и удаление работают нормально? –

+0

Работайте с этим: <% = link_to 'Edit', edit_consultation_path (patient_id: @patient, id: consulting.id)%>, другие не работают, я получаю эту ошибку: неопределенный метод 'consult 'для # <# <Класс: 0x007fa9bcb508e8>: 0x007fa9b91ab9a8>, любая идея? спасибо за помощь –

Смежные вопросы