在 Rails 上为 Ruby 的每家餐厅创建信息页面
Create info page for each restaurant with Ruby on Rails
我正在尝试在 rails 应用程序的 Ruby 中为每家餐厅创建一个信息页面。我在 Restaurant controller
中创建了一个动作 info
并在 routes.rb
中添加了一行。但它给出了一个错误
"ActiveRecord::RecordNotFound in RestaurantsController#info" Couldn't
find Restaurant with 'id'=..
我的代码有什么问题?
这是我的餐厅管理员:
class RestaurantsController < ApplicationController
before_action :set_restaurant, only: [:show, :edit, :update, :destroy, :info]
def info
end
private
def set_restaurant
@restaurant = Restaurant.find(params[:id])
end
end
这是我的routes.rb:
Rails.application.routes.draw do
resources :restaurants do
get '/info', to: 'restaurants#info'
end
end
这是 link 餐厅信息页面:
<%= link_to 'Info', restaurant_info_path(@restaurant) %>
这是因为 set_restaurant
方法没有获取任何参数,请检查并返回是否正确接收它们。
ActiveRecord::RecordNotFound in RestaurantsController#info
通过将自定义路由 嵌套在 resources :restaurants
中,生成带有错误键的路由。当你运行rake routes
时,你可以看到这条路线
restaurant_info GET /restaurants/:restaurant_id/info(.:format) restaurants#info
所以这条路线 :restaurant_id
而不是 :id
。因此,您不能执行 params[:id]
来获取此行 @restaurant = Restaurant.find(params[:id])
中的值,该行因该错误而失败。将 params[:id]
更改为 params[:restaurant_id]
应该可以解决您的问题,但 不是 正确的解决方案。
最明显和理想的解决方案是调整您的自定义路线,这样它就可以像这样生成
restaurant_info GET /restaurants/:id/info(.:format) restaurants#info
您可以将自定义路由调整到下方以实现此目的,而不是将其嵌套在 resources :restaurants
中
get 'restaurants/:id/info', to: 'restaurants#info', as: :restaurant_info
resources :restaurants
我正在尝试在 rails 应用程序的 Ruby 中为每家餐厅创建一个信息页面。我在 Restaurant controller
中创建了一个动作 info
并在 routes.rb
中添加了一行。但它给出了一个错误
"ActiveRecord::RecordNotFound in RestaurantsController#info" Couldn't find Restaurant with 'id'=..
我的代码有什么问题?
这是我的餐厅管理员:
class RestaurantsController < ApplicationController
before_action :set_restaurant, only: [:show, :edit, :update, :destroy, :info]
def info
end
private
def set_restaurant
@restaurant = Restaurant.find(params[:id])
end
end
这是我的routes.rb:
Rails.application.routes.draw do
resources :restaurants do
get '/info', to: 'restaurants#info'
end
end
这是 link 餐厅信息页面:
<%= link_to 'Info', restaurant_info_path(@restaurant) %>
这是因为 set_restaurant
方法没有获取任何参数,请检查并返回是否正确接收它们。
ActiveRecord::RecordNotFound in RestaurantsController#info
通过将自定义路由 嵌套在 resources :restaurants
中,生成带有错误键的路由。当你运行rake routes
时,你可以看到这条路线
restaurant_info GET /restaurants/:restaurant_id/info(.:format) restaurants#info
所以这条路线 :restaurant_id
而不是 :id
。因此,您不能执行 params[:id]
来获取此行 @restaurant = Restaurant.find(params[:id])
中的值,该行因该错误而失败。将 params[:id]
更改为 params[:restaurant_id]
应该可以解决您的问题,但 不是 正确的解决方案。
最明显和理想的解决方案是调整您的自定义路线,这样它就可以像这样生成
restaurant_info GET /restaurants/:id/info(.:format) restaurants#info
您可以将自定义路由调整到下方以实现此目的,而不是将其嵌套在 resources :restaurants
get 'restaurants/:id/info', to: 'restaurants#info', as: :restaurant_info
resources :restaurants