gpt4 book ai didi

ruby-on-rails - ActiveRecord:当引用键不存在时如何抛出异常

转载 作者:搜寻专家 更新时间:2023-10-30 23:38:09 24 4
gpt4 key购买 nike

比如我有两个模型:

class CheckInDetail < ApplicationRecord
belongs_to :product
end

class Product < ApplicationRecord
end

例如,当我插入 CheckInDetail 时,我将外键 product_id 添加到哈希参数中。我尝试使用一些不存在的产品 ID,并且列 product_id 将为空。我想在这样插入时抛出异常。

有一种方法可以在模型上使用 validate 在插入之前检查该字段。但我认为这会花费时间(因为我插入了一堆元素)而且并不是真的有必要,因为客户不会那样做。 (以防万一真的出了问题)。

最佳答案

这是关系数据库的优势之一,因为您可以在迁移中添加一个 foreign_key 引用,一切都应该完美运行。您可以使用 rails g migration add_foreign_key_to_check_in_details

运行迁移

在迁移中,您应该添加如下内容:

class AddForeignKeyToCheckInDetails < AR::Migration
def change
remove_foreign_key :check_in_details, :products
add_foreign_key :check_in_details, :products, dependent: :delete
end
end

有了这个,所有保存不存在的产品的尝试都会失败。还要确保将 NOT NULL 约束添加到您的 product_id 列,因为使用空 product_id 保存 check_in_detail 的尝试将会成功。迁移的更新看起来像:

change_column :check_in_details, :product_id, :integer, null: false

如果这能回答您的问题,请告诉我。

关于ruby-on-rails - ActiveRecord:当引用键不存在时如何抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38806447/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com