0

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

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

所以我把它添加到我的事件控制器中:

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

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

我怎样才能路由呢?_path 是什么?

感谢您的任何帮助

4

2 回答 2

2

我想不出这样做的充分理由。创建另一个文件是微不足道的,拥有一个具有常用 show/edit/update/etc 方法的 GalleriesController。

在您的路线中:

resources :events do
  resources :galleries

画廊控制器.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
于 2013-08-22T16:06:12.743 回答
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

名为路由的编辑是:edit_event_gallery_path.

然后,不要在您的,中添加gallery方法,而是在您的.EventsControllereditshowGalleriesController

# /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
于 2013-08-22T16:05:44.443 回答