代码之家  ›  专栏  ›  技术社区  ›  holden

在带有别名的Rails中嵌套路由

  •  0
  • holden  · 技术社区  · 14 年前

    我有一个我的项目的主要模型place.rb,它有一个places_控制器,而且我现在已经得到了我想要的用户端我的项目的确切方式。使用嵌套的照片控制器、评论等。

    我现在想创建一个管理资源,它主要只是位置的别名,有自己的嵌套资源,其中一些重叠,一些是新的。

    我尝试为它创建一个名为manage的新控制器,但我在使用routes时遇到了困难。我不太确定是不是挂断了,但我觉得我做错了什么。当我使用Places作为实际模型的控制器,并在其下嵌套其他资源时,几乎没有什么困难。

    但是,例如,试图为嵌套资源创建新记录的路由不正确。

    我能找到一条像 new_manage_room_path(@place) 一个链接可以正常工作。但是

    要以某种形式创建新公告,请执行以下操作:

    form_for manage_room_path(@place) 给定的ID无效。我尝试了许多提供对象和:url的其他组合。

    我应该避免使用单独的控制器,只创建一个别名,还是为此目的使用特殊的路由?

    map.resources :manage, :collection => { :upcoming => [ :post, :get ], :pending => [ :post, :get ] } do |manage|
      manage.resources :rooms
      manage.resources :room_rates, :as => :rates
      manage.resources :availables
      manage.resources :manage_bookings, :as => :bookings
    end
    
    map.resources :places do |place|
      place.resources :bookings
      place.resources :photos, :collection => { :sort => :post }
      place.resources :reviews, :only => [ :index, :show ]
    end
    
    
    
    manage_rooms GET    /manage/:manage_id/rooms(.:format)               {:controller=>"rooms", :action=>"index"}
                                       POST   /manage/:manage_id/rooms(.:format)               {:controller=>"rooms", :action=>"create"}
                       new_manage_room GET    /manage/:manage_id/rooms/new(.:format)           {:controller=>"rooms", :action=>"new"}
                      edit_manage_room GET    /manage/:manage_id/rooms/:id/edit(.:format)      {:controller=>"rooms", :action=>"edit"}
                           manage_room GET    /manage/:manage_id/rooms/:id(.:format)           {:controller=>"rooms", :action=>"show"}
                                       PUT    /manage/:manage_id/rooms/:id(.:format)           {:controller=>"rooms", :action=>"update"}
                                       DELETE /manage/:manage_id/rooms/:id(.:format)           {:controller=>"rooms", :action=>"destroy"}
                     manage_room_rates GET    /manage/:manage_id/rates(.:format)               {:controller=>"room_rates", :action=>"index"}
                                       POST   /manage/:manage_id/rates(.:format)               {:controller=>"room_rates", :action=>"create"}
                  new_manage_room_rate GET    /manage/:manage_id/rates/new(.:format)           {:controller=>"room_rates", :action=>"new"}
                 edit_manage_room_rate GET    /manage/:manage_id/rates/:id/edit(.:format)      {:controller=>"room_rates", :action=>"edit"}
                      manage_room_rate GET    /manage/:manage_id/rates/:id(.:format)           {:controller=>"room_rates", :action=>"show"}
                                       PUT    /manage/:manage_id/rates/:id(.:format)           {:controller=>"room_rates", :action=>"update"}
                                       DELETE /manage/:manage_id/rates/:id(.:format)           {:controller=>"room_rates", :action=>"destroy"}
                     manage_availables GET    /manage/:manage_id/availables(.:format)          {:controller=>"availables", :action=>"index"}
                                       POST   /manage/:manage_id/availables(.:format)          {:controller=>"availables", :action=>"create"}
                  new_manage_available GET    /manage/:manage_id/availables/new(.:format)      {:controller=>"availables", :action=>"new"}
                 edit_manage_available GET    /manage/:manage_id/availables/:id/edit(.:format) {:controller=>"availables", :action=>"edit"}
                      manage_available GET    /manage/:manage_id/availables/:id(.:format)      {:controller=>"availables", :action=>"show"}
                                       PUT    /manage/:manage_id/availables/:id(.:format)      {:controller=>"availables", :action=>"update"}
                                       DELETE /manage/:manage_id/availables/:id(.:format)      {:controller=>"availables", :action=>"destroy"}
                manage_manage_bookings GET    /manage/:manage_id/bookings(.:format)            {:controller=>"manage_bookings", :action=>"index"}
                                       POST   /manage/:manage_id/bookings(.:format)            {:controller=>"manage_bookings", :action=>"create"}
             new_manage_manage_booking GET    /manage/:manage_id/bookings/new(.:format)        {:controller=>"manage_bookings", :action=>"new"}
            edit_manage_manage_booking GET    /manage/:manage_id/bookings/:id/edit(.:format)   {:controller=>"manage_bookings", :action=>"edit"}
                 manage_manage_booking GET    /manage/:manage_id/bookings/:id(.:format)        {:controller=>"manage_bookings", :action=>"show"}
                                       PUT    /manage/:manage_id/bookings/:id(.:format)        {:controller=>"manage_bookings", :action=>"update"}
                                       DELETE /manage/:manage_id/bookings/:id(.:format)        {:controller=>"manage_bookings", :action=>"destroy"}
                        pending_manage POST   /manage/pending(.:format)                        {:controller=>"manage", :action=>"pending"}
                                       GET    /manage/pending(.:format)                        {:controller=>"manage", :action=>"pending"}
                       upcoming_manage POST   /manage/upcoming(.:format)                       {:controller=>"manage", :action=>"upcoming"}
                                       GET    /manage/upcoming(.:format)                       {:controller=>"manage", :action=>"upcoming"}
                          manage_index GET    /manage(.:format)                                {:controller=>"manage", :action=>"index"}
                                       POST   /manage(.:format)                                {:controller=>"manage", :action=>"create"}
                            new_manage GET    /manage/new(.:format)                            {:controller=>"manage", :action=>"new"}
                           edit_manage GET    /manage/:id/edit(.:format)                       {:controller=>"manage", :action=>"edit"}
                                manage GET    /manage/:id(.:format)                            {:controller=>"manage", :action=>"show"}
                                       PUT    /manage/:id(.:format)                            {:controller=>"manage", :action=>"update"}
                                       DELETE /manage/:id(.:format)                            {:controller=>"manage", :action=>"destroy"}
    
    1 回复  |  直到 14 年前
        1
  •  2
  •   klew    14 年前

    尝试:

    <% form_for @new_room, :url => manage_rooms_path(@place)  do |f| %>
    

    或者它可以这样工作:

    <% form_for manage_rooms_path(@place, @new_room)  do |f| %>
    

    @new_room 是房间模型的新实例,因此在控制器中添加:

    @new_room = Room.new