我正在编写一个Rails应用程序,我想在其中显示特定城市的特定餐厅、酒店和酒吧。
我的问题是,当我想显示餐厅的特定实例时(目前(,我总是在餐厅的页面上显示id为1。
这是我的路线文件:
Rails.application.routes.draw do
# For details on the DSL available within this file, see https://guides.rubyonrails.org/routing.html
root to: 'cities#index'
resources :cities, only: %i[index show] do
resources :restaurants, only: [:show]
resources :hotels, only: [:show]
resources :clubs, only: [:show]
end
end
这是我为一个特定城市举办的展览:
<h1><%= @city.name %></h1>
<div class="row">
<div class="col-4">
<h2>Restaurants</h2>
<% @restaurants.each do |restaurant| %>
<h3><%= link_to restaurant.name, [@city, @restaurant] %></h3>
<% end %>
</div>
<div class="col-4">
<h2>Hotels</h2>
<% @hotels.each do |hotel| %>
<h3><%= hotel.name %></h3>
<% end %>
</div>
<div class="col-4">
<h2>Bars</h2>
<% @clubs.each do |club| %>
<h3><%= club.name %></h3>
<% end %>
</div>
</div>
这里是我的城市管理员:
class CitiesController < ApplicationController
def index
@cities = City.all
end
def show
@city = City.find(params[:id])
@restaurants = Restaurant.all
@hotels = Hotel.all
@clubs = Club.all
end
end
这是我的餐厅管理员:
class RestaurantsController < ApplicationController
before_action :find_city
before_action :set_restaurant, only: [:show]
def index
@restaurants = @city.restaurants
end
def show; end
private
def find_city
@city = City.find(params[:city_id])
end
def set_restaurant
@restaurant = @city.restaurants.find(params[:id])
end
end
在城市节目中,无论我点击哪个餐厅,我都会出现在id为1的餐厅页面上,并显示以下路径:http://localhost:3000/cities/1/restaurants/1我真的不明白为什么。。。
我用这个教程来帮助我,但显然我仍然缺少一些东西。
更改此行:
<h3><%= link_to restaurant.name, [@city, @restaurant] %></h3>
到此:
<h3><%= link_to restaurant.name, restaurant %></h3>