首页 > 解决方案 > SQLite3::SQLException: 没有这样的表

问题描述

服务器日志截屏

大家好!正在为 airBnb 风格的项目编写评级系统,所以我将对象 Host 和 Guest 作为对 User 对象的引用。但是我的代码有问题:

SQLite3::SQLException: no such table: main.hosts

事实上,该方法会查找我没有的主机表,因为它应该与用户相关联。

移民

class CreateReviews < ActiveRecord::Migration[6.0]
  def change
    create_table :reviews do |t|
      t.text :comment
      t.integer :star, default: 1
      t.references :car, foreign_key: true
      t.references :reservation, foreign_key: true
      t.references :guest, foreign_key: true
      t.references :host, foreign_key: true
      t.string :type

      t.timestamps
    end
  end
end

架构

create_table "reviews", force: :cascade do |t|
    t.text "comment"
    t.integer "star", default: 1
    t.integer "car_id"
    t.integer "reservation_id"
    t.integer "guest_id"
    t.integer "host_id"
    t.string "type"
    t.datetime "created_at", precision: 6, null: false
    t.datetime "updated_at", precision: 6, null: false
    t.index ["car_id"], name: "index_reviews_on_car_id"
    t.index ["guest_id"], name: "index_reviews_on_guest_id"
    t.index ["host_id"], name: "index_reviews_on_host_id"
    t.index ["reservation_id"], name: "index_reviews_on_reservation_id"

楷模:

class HostReview < Review
  belongs_to :host, class_name: "User"
end


class User < ApplicationRecord
....
  has_many :host_reviews, class_name: "HostReview", foreign_key: "host_id"

标签: ruby-on-railsrubysqlite

解决方案


我认为你可以这样做:

t.references :host, references: :users, foreign_key: true

或者

t.integer :host_id

接着

add_foreign_key :reviews, :users, column: :host_id

推荐阅读