我有一个表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_histories
与to
上类型为exchangeable_currencies
的列varchar(255)
不匹配。要解决此问题,请将to
上rate_histories
列的类型更改为:string。 (例如t.string :to
)。
答案 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