Я полагаю, что проблема заключается в том, что у вас есть адресный маршрут, определенный как вложенный маршрут для пользователя.В частности, в документации rails говорится:
Передача записи (например, Active Record или Active Resource) вместо Hash, поскольку параметр options будет запускать именованный маршрут дляэта запись.Поиск произойдет по названию класса.Таким образом, передача объекта Workshop будет пытаться использовать маршрут workshop_path.Если у вас есть вложенный маршрут, такой как admin_workshop_path, вам придется вызывать его явно (для url_for невозможно угадать этот маршрут).
Другими словами, поскольку маршрут, на который делается ссылка, определенкак вложенный маршрут, рельсы не могут угадать маршрут.Поскольку адреса вложены в пользователя, он может угадать пользователя, когда он находится на определенном адресе, но не адрес, когда он находится на уровне пользователя.
Кроме того, возможно, что то, что у вас есть, является«ко многим» отношение пользователя к адресу?Если это так, тогда ваш resource
может быть resources
(множественное число) в вашем файле маршрутов.
resources :user do
resource :addresses
end
дает вам:
user_addresses POST /user/:user_id/addresses(.:format) {:action=>"create", :controller=>"addresses"}
new_user_addresses GET /user/:user_id/addresses/new(.:format) {:action=>"new", :controller=>"addresses"}
edit_user_addresses GET /user/:user_id/addresses/edit(.:format) {:action=>"edit", :controller=>"addresses"}
GET /user/:user_id/addresses(.:format) {:action=>"show", :controller=>"addresses"}
PUT /user/:user_id/addresses(.:format) {:action=>"update", :controller=>"addresses"}
DELETE /user/:user_id/addresses(.:format) {:action=>"destroy", :controller=>"addresses"}
но,
resources :user do
resources :addresses
end
дает вам:
POST /user/:user_id/addresses(.:format) {:action=>"create", :controller=>"addresses"}
new_user_address GET /user/:user_id/addresses/new(.:format) {:action=>"new", :controller=>"addresses"}
edit_user_address GET /user/:user_id/addresses/:id/edit(.:format) {:action=>"edit", :controller=>"addresses"}
user_address GET /user/:user_id/addresses/:id(.:format) {:action=>"show", :controller=>"addresses"}
PUT /user/:user_id/addresses/:id(.:format) {:action=>"update", :controller=>"addresses"}
DELETE /user/:user_id/addresses/:id(.:format) {:action=>"destroy", :controller=>"addresses"}
Обратите внимание, что второй вариант (множественное число) дает вам маршруты, чтобы иметь возможность адресовать несколько адресов для каждого пользователя, тогда как единственный маршрут дает вам только одинадрес.