ruby 未定义Api::V1::位置控制器:类的'response_to'方法

kb5ga3dv  于 2022-11-04  发布在  Ruby
关注(0)|答案(1)|浏览(83)

我是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

我想在这里使用一对多的关联。正如我想的,一个城市有一个温度,一个温度有很多城市。

ruarlubt

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版本之间可能存在其他不兼容之处。

相关问题