创建新表 - 如何设置表,其中两列链接到另一个表中的同一列?

时间:2014-07-03 06:55:36

标签: ruby-on-rails

该应用程序具有现有表exchangescurrencies。这样

select id, name, currency_id from exchanges;

 id | name | currency_id
----+------+-------------
  1 | ASX  | 1      (Australian Stock Exchange)
  3 | LSE  | 3      (London Stock Exchange)
  4 | NYSE | 2      (New York Stock Exchange)
  2 | AMEX | 2  

select id, name from currencies;

 id | name 
----+------
  1 | AUD     (Australian Dollar)
  2 | USD     (U.S. Dollar)
  3 | GBP     (Great Britain Pound)

现在我希望允许使用给定base_currency(例如@user.currency_id == 1)的用户进行货币转换。最初我想到了这几行的表格

exchange_rate table:
base_currency (currency_id), target_currency (currency_id), exchange_rate

e.g。如果您将澳元金额乘以0.8235

,则可以将澳元兑换成美元兑换成美元
1, 2, 0.8235  

如果我尝试使用名为exchange_rates的两列创建表currency_id,则迁移将失败。如果我为两个货币列中的一个使用另一个名称,当我尝试显示货币名称时会出现编译错误,例如@exchange_rate.base_currency.currency.name给出错误,而@exchange_rate.currency.name给出澳元/美元/英镑。

目前exchange_rate表如下

table "exchange_rates", force: true do |t|
  t.integer  "base_currency"
  t.integer  "currency_id"
  t.float    "exchange_rate"
  t.datetime "created_at"
  t.datetime "updated_at"
end

我是否更改了exchange_rate表的数据库名称,或者如何引用base_currency的交换。

1 个答案:

答案 0 :(得分:1)

在ExchangeRate模型中使用外键定义关联

has_one :base_currency,   foreign_key: 'base_currency', class_name: 'Currency'
has_one :currency

现在您可以像这样访问您的货币和基础货币

@exchange_rate.base_currency.name
@exchange_rate.currency.name