我试图路由我的应用程序时感到很困惑。我有很多活动,每个都应该有一个照片库。
但是我想把所有东西放在同一个EVENT控制器中(顺便说一句,另一个问题 - 这有多合理?)。因此,用户可以进入“编辑活动”页面,并在左侧显示一个带有链接的菜单,其中一个将是他的画廊。
所以我已将此添加到我的事件控制器中:
def gallery
@event = Event.find(params[:id])
end
URI应该是(我猜?):site / event / 777 / gallery / edit
我该如何路线?什么是_path?
感谢您的帮助
答案 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
中创建show
,GalleriesController
和其他其他操作。
# /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