2

这有点复杂。但是我有命名空间的路由,这个表单负责处理由两个不同控制器共享的 Customer 模型。

我的路线:

namespace "self_service" do
  resources :customers

我实例化编辑表单的糟糕尝试

= form_for [:self_service, @current_customer], action: 'update', method: :put do |f|

我的控制器

class SelfService::CustomersController < SelfService::BaseController
  layout 'self_service'

  def edit
  end

  def update
  end
end

这个实例化做了两件事是错误的:

  1. 表单的 url 是/customers/146/self_service。但不应该反过来吗?不应该self_service/customers/146/吗?

  2. 当我点击提交时,我得到一个No route matches "/customers/146/self_service"

更新

事实证明,这.. :

resources :customers do
  member do
    get :self_service

..与此相矛盾:

  namespace "self_service" do
    resources :customers
  end

但这里困扰我的是..他们为什么要相互矛盾?一个应该是:

customers/:id/self_service

另一个是:

self_service/customers/:id
4

1 回答 1

1

您使用的语法适用于嵌套资源。您不需要在 form_for 中指定命名空间。尝试:

= form_for @current_customer do |f|

- 编辑 -

我的错。但是根据这里的答案,您所做的似乎是正确的。能不能试试

= form_for [:self_service, @current_customer] do |f|

并在您的路线中,使用符号而不是字符串,即

namespace :self_service do
  resources :customers
end

不确定这是否可行,但值得一试。

-- 编辑 2 --

我还在这里使用命名空间资源设置了一个虚拟项目。我使用了 rails 脚手架生成器,这就是它生成的。它根据需要创建表单。您可以以此为例。

于 2012-06-13T19:02:31.760 回答