我是Rails新手,决定制作一个显示天气的应用程序。我学习了这个tutorial和GoRails Rails API视频课程。当我运行server(路径:http://127.0.0.1:3000/api/v1/locations),我看到undefined method respond_to for Api::V1::LocationsController:Class
错误。http://127.0.0.1:3000/api/v1/locations/1
也是一样。我搜索了很多,但没有找到合适的答案。我在这里留下代码。位置是城市,记录是温度。如果是这种情况,我也在这里留下架构。A screen of directories tree is attached.
我从来没有这么困
路由.rb
Rails.application.routes.draw do
# Define your application routes per the DSL in https://guides.rubyonrails.org/routing.html
# Defines the root path route ("/")
namespace :api, defaults: { format: :json } do
namespace :v1 do
resources :locations
end
end
resources :locations
root "locations#index"
end
位置控制器:
module Api
module V1
class LocationsController < ApplicationController
respond_to :json
def index
respond_with LocationsController.all
end
def show
respond_with find_location
end
private
def find_location
@location = LocationsController.find(params[:id])
end
end
end
end
录制控制器
class RecordingsController < ApplicationController
end
应用程序控制器
class ApplicationController < ActionController::Base
end
型号:
位置.rb
由于某种原因,它也无法在数据库中找到这些字段...
class Location < ApplicationRecord
belongs_to :recording
validates_uniqueness_of :name
end
正在录制.rb
class Recording < ApplicationRecord
has_many :locations
end
方案:
ActiveRecord::Schema[7.0].define(version: 2022_10_20_135036) do
create_table "locations", force: :cascade do |t|
t.integer "recording_id", null: false
t.string "name"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["recording_id"], name: "index_locations_on_recording_id"
end
create_table "recordings", force: :cascade do |t|
t.integer "temp"
t.string "status"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
add_foreign_key "locations", "recordings"
end
我想在这里使用一对多的关联。正如我想的,一个城市有一个温度,一个温度有很多城市。
1条答案
按热度按时间ruarlubt1#
你所学习的教程已经很老了,部分已经过时了。
Api::V1:: LocationsController
的第一行中的respond_to
方法在大约六年前在Ruby on Rails 5.0中被删除了。但好消息是它的功能已经被提取到responders gem中,这意味着当你把gem添加到你的应用程序的
Gemfile
中时,在运行bundle install
并重新启动服务器后,它可能会工作。注:我之所以写 it might work,是因为本教程与您当前的最新Ruby on Rails 7.0版本之间可能存在其他不兼容之处。