以下是routes.rb
中模型的结构:
resources :model_a do
resources :model_b do
resources :model_c do
resources :photos do
collection do
get :upload_data
end
end
...
...
...
在网址
上http://localhost:3001/model_a/1/model_b/2/model_c/3/photos/upload_data
是显示选择文件的表单。它位于名为Photos
的控制器和操作upload_data
。
我收到错误消息
#<#:...>
的未定义方法`photos_path'
我认为这是因为这个控制器在另一个控制器内部,但是如何解决?
答案 0 :(得分:2)
一般来说,注意Rails Doc
中的警告是明智的资源不应该嵌套超过1级。
这是一个基于深度嵌套资源导致不必要的复杂性的经验的指南。
您描述的错误听起来像是因为您在视图表单中使用了错误的路径助手。由于它是嵌套的,它不是photos_path
,而是所有嵌套资源与某些怪物的组合,如:
model_a_model_b_model_c_upload_data_photos_path(model_a, model_b, model_c)
您应该检查rake routes
是否有正确且难以使用的路径。
答案 1 :(得分:0)
这可能会解决您的问题:http://guides.rubyonrails.org/routing.html#nested-resources
这里有一条注释:"Resources should never be nested more than 1 level deep."
正如您提到的代码,您使用了超过1个级别。我认为这不是一个好习惯。
希望这会对你有所帮助。