例如,我有两个模型:
class CheckInDetail < ApplicationRecord
belongs_to :product
end
class Product < ApplicationRecord
end
例如,当我插入
CheckInDetail
时,我将外键product_id
添加到哈希参数。我尝试使用一些不存在的产品ID和列product_id
将为空。我想在这样插入时抛出异常。有一种方法可以在插入之前使用
validate
on model检查该字段。但我认为这将花费时间(因为我插入了一堆项目),并不是真正必要的,因为客户不这样做。(以防万一真的出了问题)。 最佳答案
这是关系数据库的好处之一,因为您可以在迁移中添加一个外键引用,并且一切都应该正常工作。
您可以使用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
有了这一点,所有试图挽救一个不存在的产品将失败。还要确保在
product_id
列中添加not null约束,因为尝试使用空产品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/