Rails 4.2:将引用字段转换为外键

时间:2017-12-05 17:38:39

标签: mysql ruby-on-rails ruby-on-rails-4 indexing foreign-keys

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

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

这允许我使用无效的credit_card 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?

1 个答案:

答案 0 :(得分:0)

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

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

希望这有帮助! :)