gpt4 book ai didi

mysql - rails 4.2 : Turn a reference field into foreign key

转载 作者:行者123 更新时间:2023-11-29 18:08:00 25 4
gpt4 key购买 nike

我正在维护一个使用 Rails 4.2 的旧系统,并且出于未知原因,引用是这样创建的:

  t.references :credit_card, null: false
t.references :car, null: false
t.references :profile, null: false

例如,这允许我使用无效的信用卡 ID 为该模型创建寄存器。外键未经过验证。

生成索引迁移并没有将它们变成 fk,并且根本没有验证它们:

class AddIndexToRentals < ActiveRecord::Migration
def change
add_index :rentals, :credit_card_id
add_index :rentals, :car_id
add_index :rentals, :profile_id
end
end

如何使这些字段成为外键并仅接受现有的 ID?

最佳答案

您可以向迁移添加外键以验证引用记录的存在、生成迁移并执行以下操作。

class AddForeignKeyToRentals < ActiveRecord::Migration
def change
add_foreign_key :rentals, :credit_cards
add_foreign_key :rentals, :cars
add_foreign_key :rentals, :profiles
end
end

需要注意的一点是,如果外键列中不存在记录,您将无法运行此迁移。您还可以在模型中添加额外的存在验证。

validates :credit_card, :car, :profile, presence: true

希望这有帮助! :)

关于mysql - rails 4.2 : Turn a reference field into foreign key,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659538/

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