【问题标题】:PG::UndefinedColumn: ERROR: the column doesn't exist addresses.property on API deletePG::UndefinedColumn: 错误:该列不存在 addresses.property on API delete
【发布时间】:2022-11-28 15:11:43
【问题描述】:

我的问题真的很奇怪,我正在尝试删除我的 API 中的一个属性,我已经可以使用 thunder 客户端创建和编辑它但是在尝试删除时它会生成此错误:

enter image description here

我把 dependent: destroy 放在模型上,所以无论是否已经创建了一个地址,它都应该删除,此外我不应该有一个 address.property_id 列,因为它不存在,我有一个从地址到属性和另一个从属性到用户。当我尝试删除具有地址和属性的用户时,它会生成相同的错误,所以我真的不知道它是什么。

这是我的模式:

enable_extension "plpgsql"

create_table "addresses", force: :cascade do |t|
    t.string "street", null: false
    t.integer "number", null: false
    t.string "city", null: false
    t.string "country", null: false
    t.string "zip_code", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "blocked_periods", force: :cascade do |t|
    t.date "start_date", null: false
    t.date "end_date", null: false
    t.bigint "property_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["property_id"], name: "index_blocked_periods_on_property_id"
  end

create_table "categories", force: :cascade do |t|
    t.string "name"
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
  end

create_table "hostings", force: :cascade do |t|
    t.integer "cycle", null: false
    t.integer "minimum_cycle_amount", null: false
    t.float "rate", null: false
    t.boolean "public", default: true, null: false
    t.float "cleaning_fee"
    t.bigint "user_id", null: false
    t.bigint "properties_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["properties_id"], name: "index_hostings_on_properties_id"
    t.index ["user_id"], name: "index_hostings_on_user_id"
  end

create_table "properties", force: :cascade do |t|
    t.string "name", null: false
    t.string "description", null: false
    t.integer "guest_capacity", null: false
    t.integer "bedrooms", null: false
    t.integer "beds", null: false
    t.integer "bathrooms", null: false
    t.integer "kind", default: 0, null: false
    t.float "size", null: false
    t.bigint "user_id", null: false
    t.bigint "address_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["address_id"], name: "index_properties_on_address_id"
    t.index ["user_id"], name: "index_properties_on_user_id"
  end

create_table "property_categories", force: :cascade do |t|
    t.bigint "property_id", null: false
    t.bigint "category_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["category_id"], name: "index_property_categories_on_category_id"
    t.index ["property_id"], name: "index_property_categories_on_property_id"
  end

create_table "property_images", force: :cascade do |t|
    t.string "source", null: false
    t.bigint "property_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["property_id"], name: "index_property_images_on_property_id"
  end

create_table "reservations", force: :cascade do |t|
    t.integer "quests", null: false
    t.date "check_in", null: false
    t.date "check_out", null: false
    t.float "price", null: false
    t.bigint "user_id", null: false
    t.bigint "hosting_id", null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["hosting_id"], name: "index_reservations_on_hosting_id"
    t.index ["user_id"], name: "index_reservations_on_user_id"
  end

create_table "users", force: :cascade do |t|
    t.string "name", null: false
    t.string "email", null: false
    t.string "password_digest", null: false
    t.integer "role", default: 0, null: false
    t.datetime "created_at", null: false
    t.datetime "updated_at", null: false
    t.index ["email"], name: "index_users_on_email", unique: true
  end

  add_foreign_key "blocked_periods", "properties"
  add_foreign_key "hostings", "properties", column: "properties_id"
  add_foreign_key "hostings", "users"
  add_foreign_key "properties", "addresses"
  add_foreign_key "properties", "users"
  add_foreign_key "property_categories", "categories"
  add_foreign_key "property_categories", "properties"
  add_foreign_key "property_images", "properties"
  add_foreign_key "reservations", "hostings"
  add_foreign_key "reservations", "users"
end

还有我的财产和地址模型

class Property < ApplicationRecord
  has_many :property_images, dependent: :destroy
  has_many :property_categories, dependent: :destroy
  has_many :blocked_periods, dependent: :destroy
  has_one : address, dependent: : destroy
  belongs_to :user

  validates :name, presence: true
  validates :description, presence: true
  validates :guest_capacity, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
  validates :bedrooms, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
  validates :beds, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
  validates :bathrooms, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
  validates :kind, presence: true
  enum kind: %i[apartment house]
  validates :size, presence: true, numericality: { only_integer: true, greater_than_or_equal_to: 1 }
end

class Address < ApplicationRecord
  # belongs_to :property
  validates :s treet, presence: true
  validates :city, presence: true
  validates :country, presence: true
end

我在属于属性的地址模型中发表评论,因为如果我离开它,我将无法创建属性

这是我的用户模型,我有依赖项:销毁属性和地址

class User < ApplicationRecord
  has_many :properties, dependent: :destroy
  has_many :reservations, dependent: :destroy

  has_secure_password

  validates :name, presence: true
  validates :email, presence: true, uniqueness: true
  validates :password, presence: true

  enum role: %i[user admin]

  after_initialize :set_default_role, if: :new_record?

  private

  def set_default_role
    self.role ||= :user
  end
end

所以我使用相同的逻辑来销毁用户、属性和地址,我可以删除一个地址,因为它没有对任何表的引用,但该属性引用了地址,同时用户引用了属性.

【问题讨论】:

  • 谢谢你的建议

标签: ruby-on-rails postgresql thunderclient


【解决方案1】:
依赖:销毁模型,因此无论是否已创建地址,它都应该删除,这应该有效

【讨论】:

    猜你喜欢
    • 2015-10-13
    • 2013-12-15
    • 2015-07-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    • 2020-01-16
    • 2016-07-11
    • 2015-11-24
    相关资源
    最近更新 更多