对于嵌套路由,我将使用以下设置:
# routes.rb
resources :venues do
resources :events
end
# venues controller
class VenuesController < ApplicationController
def index
@venues = Venue.all
end
def show
@venue = Venue.find(params[:id])
end
end
# venues index.html.erb
<% @venues.each do |venue| %>
<%= link_to 'Venue', venue_path(venue) %>
<% end %>
# venues show.html.erb
# link to the events index page from the current venue
<%= link_to 'Events', venue_events_path(@venue) %>
# link to each individual event from the current venue
<% @venue.events.each do |event| %>
<%= link_to 'Event', venue_event_path(@venue, event)
<% end %>
# events controller
class EventsController < ApplicationController
def index
@venue = Venue.find(params[:venue_id])
@events = @venue.events
end
def show
@event = Event.find(params[:id])
end
end
# events index.html.erb
# link back to venue
<%= link_to 'Venue', venue_path(@venue) %>
# link to each event
<% @events.each do |event| %>
<%= link_to 'Event', venue_event_path(event.venue, event) %>
<% end %>
# events show.html.erb
# link back to events index
<%= link_to 'Events', venue_events_path(@event.venue) %>
# link back to venue show
<%= link_to 'Venue', venue_path(@event.venue) %>
请记住,这只有在您的活动有场地 ID 时才有效。您说您的活动模型中有:belongs_to :venue, optional: true 可选的 true 使活动不需要场所 ID。如果这是您想要的,那么嵌套路由就没有意义了,因为 NOT 嵌套事件不会被嵌套链接。