0

現在、ネストされたプロジェクトがあります。床=>スイッチ=>ジャックから始まります。新しいジャックを作成しようとすることで、すべてがうまくいきました。私がスイッチショーにいるとき、新しいジャックと作成ボタン用のオープンフィールドがあります。ジャック番号を入力して作成すると、エラーが発生します。他のすべてのコードが正しいと仮定すると (他のコードを見たい場合はお知らせください)、jacks コントローラーの create メソッドの何が問題になっているのでしょうか?

アプリ/コントローラー/jacks_controller.rb:

  ...
  def create
    @floor = Floor.find(params[:floor_id])
    @switch = @floor.switches.find(params[:switch_id])
    @jack = @switch.jacks.create(params[:jack])
    redirect_to(@switch)
  end
  ...

それが私に与えるエラーは、「ルートが [POST] "/floors/1/switches/1" に一致しません」です。これは、ジャックを追加している現在のスイッチの正確な URL であるため、私には意味がありません。

私が間違っていることや誤解を説明できる人に事前に感謝します!

編集:

これが私のレーキルートです:

    floor_switch_jacks GET    /floors/:floor_id/switches/:switch_id/jacks(.:format)          jacks#index
                       POST   /floors/:floor_id/switches/:switch_id/jacks(.:format)          jacks#create
 new_floor_switch_jack GET    /floors/:floor_id/switches/:switch_id/jacks/new(.:format)      jacks#new
edit_floor_switch_jack GET    /floors/:floor_id/switches/:switch_id/jacks/:id/edit(.:format) jacks#edit
     floor_switch_jack GET    /floors/:floor_id/switches/:switch_id/jacks/:id(.:format)      jacks#show
                       PUT    /floors/:floor_id/switches/:switch_id/jacks/:id(.:format)      jacks#update
                       DELETE /floors/:floor_id/switches/:switch_id/jacks/:id(.:format)      jacks#destroy
        floor_switches GET    /floors/:floor_id/switches(.:format)                           switches#index
                       POST   /floors/:floor_id/switches(.:format)                           switches#create
      new_floor_switch GET    /floors/:floor_id/switches/new(.:format)                       switches#new
     edit_floor_switch GET    /floors/:floor_id/switches/:id/edit(.:format)                  switches#edit
          floor_switch GET    /floors/:floor_id/switches/:id(.:format)                       switches#show
                       PUT    /floors/:floor_id/switches/:id(.:format)                       switches#update
                       DELETE /floors/:floor_id/switches/:id(.:format)                       switches#destroy
                floors GET    /floors(.:format)                                              floors#index
                       POST   /floors(.:format)                                              floors#create
             new_floor GET    /floors/new(.:format)                                          floors#new
            edit_floor GET    /floors/:id/edit(.:format)                                     floors#edit
                 floor GET    /floors/:id(.:format)                                          floors#show
                       PUT    /floors/:id(.:format)                                          floors#update
                       DELETE /floors/:id(.:format)                                          floors#destroy
            home_index GET    /home/index(.:format)                                          home#index
                  root        /                                                              home#index

これは routes.rb に適していますか? それ以外の場合、私の routes.rb は非常に基本的なものであり、あまり触れていません。それが私の問題である場合、routes.rb の部分を詳しく説明していないチュートリアルを教えてもらえますか?

編集:

それを私が直した。問題は、jacks/_form.html.erb の行のフォームにありました。正しい構文は次のとおりです。

<%= form_for [@floor, @switch, @switch.jacks.new]  do |f| %>

助けようとした人に感謝します。

4

1 に答える 1

3

私は同じような状況に遭遇し、redirect_toステートメントを変更することでそれを解決しました。次のようなものを試してください。

redirect_to [@floor, @switch]

エラーメッセージが役に立たなかったことを覚えているとき、それは実際に私を道から外してしまいました。

すべてのルートはで始まります/floorが、私は信じています

redirect_to @switch

/switch定義していないパスに解決しようとします。

于 2012-06-16T03:29:47.730 に答える