Rails - 在同一个控制器中嵌套路由

时间:2013-08-22 15:58:55

标签: ruby-on-rails ruby-on-rails-4

我试图路由我的应用程序时感到很困惑。我有很多活动,每个都应该有一个照片库。

但是我想把所有东西放在同一个EVENT控制器中(顺便说一句,另一个问题 - 这有多合理?)。因此,用户可以进入“编辑活动”页面,并在左侧显示一个带有链接的菜单,其中一个将是他的画廊。

所以我已将此添加到我的事件控制器中:

def gallery
  @event = Event.find(params[:id])
end

URI应该是(我猜?):site / event / 777 / gallery / edit

我该如何路线?什么是_path?

感谢您的帮助

2 个答案:

答案 0 :(得分:2)

我认为没有充分理由这样做。创建另一个文件是微不足道的,有一个GalleriesController与通常的show / edit / update / etc方法。

在您的路线中:

resources :events do
  resources :galleries

galleries_controller.rb:

class GalleriesController < ApplicationController

  # GET /events/1/galleries/1/edit
  def edit
    @event = Event.find(params[:event_id])
    @gallery = @event.galleries.find(params[:id])
  end

end

答案 1 :(得分:1)

config/routes.rb中的以下配置可为您提供所需内容:

resources :events do 
  resources :galleries
end

这会给你event_galleries_path。而且,这将给你event_galleries_path。以下是上述配置提供的七条路径:

      event_galleries GET    /events/:event_id/galleries(.:format)              galleries#index
                      POST   /events/:event_id/galleries(.:format)              galleries#create
    new_event_gallery GET    /events/:event_id/galleries/new(.:format)          galleries#new
   edit_event_gallery GET    /events/:event_id/galleries/:id/edit(.:format)     galleries#edit
        event_gallery GET    /events/:event_id/galleries/:id(.:format)          galleries#show
                      PUT    /events/:event_id/galleries/:id(.:format)          galleries#update
                      DELETE /events/:event_id/galleries/:id(.:format)          galleries#destroy

名为route的编辑是:edit_event_gallery_path

然后,不是在gallery中添加EventsController方法,而是在edit中创建showGalleriesController和其他其他操作。

# /events/:event_id/galleries/:id/edit
def edit
  @gallery = Gallery.find(params[:id])
end

# /events/:event_id/galleries/:id
def show 
  @event = Event.find(params[:event_id])

  # And your galleries, something like this
  @galleries = @event.galleries.find(params[:id])
end