2012-06-15 65 views
0

所以目前我有一個嵌套的項目。它從floor => switches => jacks開始。我已經通過嘗試創建一個新的插孔來完成所有工作。當我在開關顯示中時,有一個新的插孔和一個創建按鈕。當我輸入插孔號碼並點擊創建錯誤時。假設所有其他代碼是正確的(讓我知道如果你想看到任何其他代碼),我的插孔控制器中的創建方法有什麼問題?Ruby on Rails創建一個新的雙向嵌套對象

應用/控制器/ 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] 」/樓層/ 1 /開關/ 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部分?

編輯:

我修好了。問題出現在我的插孔/ _form.html.erb中。正確的語法是:

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

感謝任何試圖幫助的人,非常感謝!

+0

你能發佈你的routes.rb文件的相關部分嗎?如果您可以瀏覽到/ floors/1/switches/1但不能在那裏發佈,那聽起來像是路由問題。 –

+0

我編輯了主帖。讓我知道,並感謝您的幫助! –

+0

嗯,我沒有看到任何看起來像'POST/floors /:floor_id/switches /:id'的路線,這就是錯誤所說的不存在的路線。 –

回答

3

我遇到了類似的情況,並通過更改我的redirect_to聲明來解決此問題。嘗試是這樣的:

redirect_to [@floor, @switch] 

當時我記得的錯誤消息並沒有幫助我的時候,它實際上是扔我離開的線索。

的所有路由與/floor開始,但我相信

redirect_to @switch 

將盡力解決的/switch路徑,你沒有定義。

+0

這項工作?如果這個答案解決了您的問題,那麼如果您將其標記爲已接受,這將有助於其他人遇到類似問題。謝謝。 –

+0

嘿,對不起,我從星期四開始走了,沒有太多的時間來處理它。 不,它沒有工作,我仍然有同樣的問題。我嘗試新的redirect_to,我仍然得到: 沒有路由匹配[POST]「/ floors/1/switches/1」 –

+0

我得到它的工作!相信我,我事先做過搜索,但現在我做得很好,類似於我的情況,我修正了它。我將編輯信息的主要帖子。 –