Ruby 在 Rails 路由上 - 查询参数与 id
Ruby on Rails routes - Query parameter vs id
我正在尝试设置接受动态字段的路由。餐厅有类别 [:chinese, :fast_food, :french, :vegan]
并且路由 restaurants/vegan
允许在索引操作中 return 该类别下的餐厅列表(请求仅 /restaurants
然后它 return所有餐厅),这是有效的。
但是 show 动作不起作用,因为它卡在了 index 动作中。 "restaurant/2"
不起作用,因为索引操作查找类别 2,而 2 是 restaurant.id
有什么方法可以区分这两个动态字段吗?
提前致谢
routes.rb
get "restaurants/:category", to: "restaurants#index"
resources :restaurants, only: [:index, :show, :new, :create, :destroy]
restaurants_controller
def index
raise
if params[:category]
@restaurants = Restaurant.where(categories: params[:category])
else
@restaurants = Restaurant.all
end
end
def show
@restaurant = Restaurant.find(params[:id])
end
因为您在与 :id
相同的位置有一个动态路段,所以您必须在路线上使用限制条件。
https://guides.rubyonrails.org/routing.html#segment-constraints
# `restaurants/1` will be ignored
# `restaurants/anything-else` will be routed to RestaurantsController#index
get 'restaurants/:category',
to: 'restaurants#index',
constraints: { category: /[^0-9]+/ }
resources :restaurants
我正在尝试设置接受动态字段的路由。餐厅有类别 [:chinese, :fast_food, :french, :vegan]
并且路由 restaurants/vegan
允许在索引操作中 return 该类别下的餐厅列表(请求仅 /restaurants
然后它 return所有餐厅),这是有效的。
但是 show 动作不起作用,因为它卡在了 index 动作中。 "restaurant/2"
不起作用,因为索引操作查找类别 2,而 2 是 restaurant.id
有什么方法可以区分这两个动态字段吗?
提前致谢
routes.rb
get "restaurants/:category", to: "restaurants#index"
resources :restaurants, only: [:index, :show, :new, :create, :destroy]
restaurants_controller
def index
raise
if params[:category]
@restaurants = Restaurant.where(categories: params[:category])
else
@restaurants = Restaurant.all
end
end
def show
@restaurant = Restaurant.find(params[:id])
end
因为您在与 :id
相同的位置有一个动态路段,所以您必须在路线上使用限制条件。
https://guides.rubyonrails.org/routing.html#segment-constraints
# `restaurants/1` will be ignored
# `restaurants/anything-else` will be routed to RestaurantsController#index
get 'restaurants/:category',
to: 'restaurants#index',
constraints: { category: /[^0-9]+/ }
resources :restaurants