2

これはちょっと複雑です。しかし、私は名前空間のルートを持っており、このフォームは2つの異なるコントローラーによって共有される顧客モデルを処理しています。

私のルート:

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

このインスタンス化は、間違っている2つのことを行います。

  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

しかし、ここで私を悩ませているのは..なぜそれらは互いに矛盾する必要があるのでしょうか?1つは:

customers/:id/self_service

そしてもう1つは:

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-

また、名前空間リソースを使用してダミープロジェクトをここにセットアップしました。私はレール足場ジェネレーターを使用しました、そしてこれはそれが生成したものです。必要に応じてフォームを作成します。例としてこれに従うことができます。

于 2012-06-13T19:02:31.760 に答える