如何为内部模型设置表单路径?

时间:2013-04-09 13:33:17

标签: ruby-on-rails ruby routes

以下是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'

我认为这是因为这个控制器在另一个控制器内部,但是如何解决?

2 个答案:

答案 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个级别。我认为这不是一个好习惯。

希望这会对你有所帮助。