2012-06-15 67 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

我得到它的工作!相信我,我事先做过搜索,但现在我做得很好,类似于我的情况,我修正了它。我将编辑信息的主要帖子。 –