【问题标题】:rails models - two tables have the same primary and foreign key fieldsrails 模型 - 两个表具有相同的主键和外键字段
【发布时间】:2011-03-20 08:20:19
【问题描述】:

我正在将现有数据库与 Rails 应用程序一起使用。

我无法更改表名或列名。

假设表一是“发票”,表二是“订单”

他们都有一个主键,叫做同一个东西,比如说“order_id”

invoices 可以通过查看 orders 表中的主键“order_id”来找到它的订单。

订单查找发票反之亦然。

发票可以有但不总是有一个订单(您可能会收到订单以外的其他东西的发票,例如“work_order”,可以通过在“work_orders”表的主键位置查找“order_id”来找到. 所以发票可能有 work_order 或 order。

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

我试图找出模型中的类。

您是否将主键和外键设置为相同的东西?属于_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

这是正确的吗?这样做似乎很垃圾,但是这个数据库很糟糕。

所有 belongs_to 的东西呢?

如果我遗漏了什么,请告诉我。

谢谢!

【问题讨论】:

    标签: ruby-on-rails activerecord


    【解决方案1】:

    我相信答案可能是:

    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 新手)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-02
      • 2020-12-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多