在rails 3中创建嵌套的自定义资源

时间:2014-04-15 14:49:39

标签: ruby-on-rails

我有一个专业模特和一个公民模特。我想做的是在专业模特里面嵌套的公民注册,但我磕磕绊绊......

我在我的路线中使用:

  get "professional/citizen_edit/:id" => "professional#citizen_edit", as: :professional_citizen_edit
  get "professional/cidadao_show/:id" => "professional#citizen_show", as: :professional_citizen_show
  put "profissionais/cidadao_update/:id" => "professional#citizen_update", as: :professional_citizen_update

每个人都使用自定义控制器操作 几乎已经完成了,但是在为新公民添加按钮时我遇到了困难 (我的表单页面卡在更新操作中,我无法使用这两个操作)

在尝试解决此问题时,我发现了http://guides.rubyonrails.org/routing.html 而这:

  namespace :professionals do
    resources :registrations
  end

看一种更优雅的方式来处理我的问题。但现在我不知道如何处理控制器!我有这些路线:

professionals_registrations GET    /professionals/registrations(.:format)                           professionals/registrations#index
POST   /professionals/registrations(.:format)                           professionals/registrations#create
new_professionals_cadastro GET    /professionals/registrations/new(.:format)                       professionals/registrations#new
edit_professionals_cadastro GET    /professionals/registrations/:id/edit(.:format)                  professionals/registrations#edit
professionals_cadastro GET    /professionals/registrations/:id(.:format)                       professionals/registrations#show
PUT    /professionals/registrations/:id(.:format)                       professionals/registrations#update
DELETE /professionals/registrations/:id(.:format)                       professionals/registrations#destroy

我试图在应用程序/控制器或应用程序/控制器/专业人员中添加自定义控制器“注册”但我无法找到控制器正确的路径并继续获取

at: http://127.0.0.1:3000/Profissionais/registrations)
uninitialized constant Profissionais::RegistrationsController

任何人都有任何关于现在该做什么的线索?

1 个答案:

答案 0 :(得分:1)

使用命名空间时,您必须做两件事:

  • 将所有控制器移至app/controllers/下与命名空间同名的文件夹
  • 让你的控制器继承一个与命名空间名称相同的控制器(在你的情况下是Profissionais

您收到该错误的原因是父控制器Profissionais不存在(即未初始化的常量)

正如documentation所述,您在Profissionais::中定义的所有控制器都必须位于命名空间(在您的情况下为routes.rb)。

<强>提示:

我自己没有尝试过,但也可以使用模块创建命名空间,而不是从驻留在app/controllers/中的父控制器继承。有关详情,请参阅here