2010-07-23 81 views
0

我正在使用现有的数据库与导轨应用程序。导轨模型 - 两个表具有相同的主键和外键字段

我无法更改表名或列名。

比方说,表中的一个是“发票”和表2是“订单”

他们都有那个叫同样的事情一个主键,可以说“ORDER_ID”

发票可以找到它的顺序通过查看订单表中的主键“order_id”。

对于查找其发票的订单反之亦然。

发票可以有但并不总是有一个订单(除了订单以外,您可能会被开具发票,例如通过查找“work_orders”的主键位置中的“order_id”找到的“work_order”表。所以,发票可能有一个work_order或订单。

订单总是有发票 work_orders总是有发票

我试着在模型中找出类。

你设置主键和外键都是一样的东西?那么belongs_to呢?这个数据库是建立起来的,没有任何东西属于任何东西,它们只是通过相同的值“order_id”来引用对方。会是这样吗?

class Invoice < ActiveRecord::Base 
    set_primary_key(:order_id) 
    set_foreign_key(:order_id) 
end 

- 喀嚓 -

class Order < ActiveRecord::Base 
    set_primary_key(:order_id) 
    set_foreign_key(:order_id) 
end 

......而同样的工作秩序。

class WorkOrder < ActiveRecord::Base 
    set_primary_key(:order_id) 
    set_foreign_key(:order_id) 
end 

这是正确的吗?它似乎没有办法做到这一点,但这个DB是可怕的。

所有belongs_to的东西呢?

让我知道我是否遗漏了任何东西。

谢谢!

回答

0

我相信答案可能是:

class Order < ActiveRecord::Base 
    set_primary_key(:order_id) 
    belongs_to :invoice, :foreign_key => :order_id 
end 

class WorkOrder < ActiveRecord::Base 
    set_primary_key(:order_id) 
    belongs_to :invoice, :foreign_key => :order_id 
end 

class Invoice < ActiveRecord::Base 
    set_primary_key(:order_id) 
    has_one :work_order 
    has_one :order 
end 

虽然我真的不知道你的主键,也可以是一个外键(我是新来的Rails太)