#ruby-on-rails #ruby #routing #rails-routing
#ruby-on-rails #ruby #маршруты #rails-маршрутизация
Вопрос:
В моем routes.rb
файле есть следующий вложенный ресурс
resource :issuer do
resources :certificates
end
Мои модели:
class Issuer < ActiveRecord::Base
has_many :certificates
end
class Certificate < ActiveRecord::Base
belongs_to :issuer
end
Я получаю следующую ошибку при посещении: /issuer/2/certificates
No route matches {:action=>"edit", :controller=>"certificates"}
Буду признателен за любую помощь.. Заранее спасибо!
РЕДАКТИРОВАТЬ: МОЙ rake routes
issuer_certificates GET /issuer/:issuer_id/certificates(.:format) {:action=>"index", :controller=>"certificates"}
POST /issuer/:issuer_id/certificates(.:format) {:action=>"create", :controller=>"certificates"}
new_issuer_certificate GET /issuer/:issuer_id/certificates/new(.:format) {:action=>"new", :controller=>"certificates"}
edit_issuer_certificate GET /issuer/:issuer_id/certificates/:id/edit(.:format) {:action=>"edit", :controller=>"certificates"}
issuer_certificate GET /issuer/:issuer_id/certificates/:id(.:format) {:action=>"show", :controller=>"certificates"}
PUT /issuer/:issuer_id/certificates/:id(.:format) {:action=>"update", :controller=>"certificates"}
DELETE /issuer/:issuer_id/certificates/:id(.:format) {:action=>"destroy", :controller=>"certificates"}
Ответ №1:
Вы должны использовать ресурсы (множественное число) вместо resource в refer to :issuer. Поэтому, пожалуйста, попробуйте это:
resources :issuers do
resources :certificates
end
и issuers/2/certificates
будет работать.
Комментарии:
1. пожалуйста, посмотрите: guides.rubyonrails.org/routing.html#nested-resources . Это именно ваш случай, решенный моим способом 🙂
Ответ №2:
В вашем файле routes.rb вы определяете эмитента как отдельный ресурс
resource :issuer do # <----- using resource instead of resources
resources :certificates
end
При использовании отдельных ресурсов полученные вами маршруты не позволяют сопоставлять :id, поэтому в вашем примере,
issuer/2/certificates
это «2», которое доставляет вам огорчение. Вы должны либо избавиться от этого, либо определить:issuer как стандартный (неособый) ресурс в вашем файле routes.rb.
Комментарии:
1. Неважно. Из опубликованных вами выходных данных rake routes я вижу, что issuer_ids совпадают. Вероятно, вы просто допустили опечатку в routes.rb в своем вопросе.
Ответ №3:
У вас не PUT
определено для /issuer/2/certificates
. вместо этого вы определили его для /issuer/2/certificates/123
. Вот почему вы получаете эту ошибку.
Если вы пытаетесь отредактировать certificate
, убедитесь, что вы сгенерировали правильную ссылку и включили certificate_id
.