Rails:将外键添加到多列的主键中

时间:2019-05-18 09:50:33

标签: mysql ruby-on-rails ruby

我有一个表exchangeablecurrencies,其主键由两列组成,从和至。我想用外键创建可兑换货币的表rate_history。

我尝试为提到的两个主键创建两个外键。

class CreateExchangeableCurrencies < ActiveRecord::Migration[5.2]
  def change
    create_table :exchangeable_currencies, primary_key: %i[from to] do |t|
      t.string :from
      t.string :to

      t.timestamps
    end
  end
end

class CreateRateHistories < ActiveRecord::Migration[5.2]
  def change
    create_table :rate_histories do |t|
      t.date :date
      t.float :rate
      t.string :from
      t.string :to
      t.timestamps
    end
  add_foreign_key :rate_histories, :exchangeable_currencies,
                column: :from, primary_key: :from, on_delete: 
  :cascade
 add_foreign_key :rate_histories, :exchangeable_currencies,
                column: :to, primary_key: :to, on_delete: :cascade
  end
end

这是错误

to上的列rate_historiesto上类型为exchangeable_currencies的列varchar(255)不匹配。要解决此问题,请将torate_histories列的类型更改为:string。 (例如t.string :to)。

1 个答案:

答案 0 :(得分:0)

您应该对“从”和“至”列使用货币代码,而不是使用任何字符串。

然后,将它们命名为“ from_currency_code”和“ to_currency_code”。

然后将那些“ from_currency_code”和“ to_currency_code”,“ modified_date_time”标记为组合唯一键,如下所示。

add_index :currency_update, [:from_currency_code, :to_currency_code, :modified_date_time], :unique => true