如何使用 link_to 返回关联索引

How to refer back to associated index with link_to

第一次做嵌套路由,我无法弄清楚我拥有的嵌套路由的 link_to 路径。为每个

使用rails脚手架
resources :venues do
     resources :events
   end

我在场地模型的index.html.erb中编辑了以下内容

<%= link_to 'Events', venue_events_path(venue) %>

这让我找到了事件模型的正确 index.html.erb (venues/1/events)

但我似乎无法在活动的显示页面上找到正确的 link_to 路径让我回到 venues/1/events

使用默认脚手架,它的 <%= link_to 'Back', events_path %>

我尝试了不同的路径,例如 venue_events_path(venue),但是 rails 一直说没有 ID 找不到场地。 我假设这是因为点击默认显示 link 将我带到 localhost:3000/events/1 而不是 localhost:3000/venues/1/events/1

除了我面临的困难之外,嵌套属性的正确路径是什么?

对于嵌套路由,我将使用以下设置:

# 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 使得事件不需要 venue_id。如果那是你想要的,那么嵌套路由就没有意义,因为 NOT 嵌套事件不会被嵌套链接。