如何为具有相同关系的两个外键的模型编写关联?

问题描述

我一直在回想自己没有解决的问题。我有一个context.resources.assets表,其中有两列用于shipments,即addressesto_address_id

看了一个相关的问题(Same Model for Two belongs_to Associations migration)之后,我仍然感到困惑。到目前为止,这是我的工作。我还没有运行迁移。我正在努力解决这个问题,然后再花一两个小时。非常感谢您的帮助。

from_address_id

解决方法

如果我理解正确,那么您想在运输中添加起源和目的地地址吗?

在这种情况下:

如果您要创建迁移来创建关系

class AddOriginAndDestinyAddressToShipment < ActiveRecord::Migration[6.0]
  def change
    add_reference :shipments,:from_address,foreign_key: { to_table: :addresses }
    add_reference :shipments,:to_address,foreign_key: { to_table: :addresses }
  end
end

如果要创建具有关系的模型

class CreateShipments < ActiveRecord::Migration[6.0]
  def change
    create_table :shipments do |t|
      t.datetime :deadline
      t.references :from_address,null: false,foreign_key: { to_table: :addresses }
      t.references :to_address,foreign_key: { to_table: :addresses }
      t.timestamps
    end
  end
end

运输模型必须是这样的

class Shipment < ApplicationRecord
  belongs_to :to_address,class_name: 'Address'
  belongs_to :from_address,class_name: 'Address'
end
,

我不需要迁移,因为外键已经到位。我尝试过的那个没有用,strong_migrations宝石在抱怨。我只需要将其正确连接即可。

我想展示一下保存混乱的方式,因此我可以输入shipment.to_addressshipment.address_to并获得相同的结果。谢谢。

class Shipment < ApplicationRecord
  belongs_to :address_from,class_name: 'Address',foreign_key: :from_address_id
  belongs_to :from_address,foreign_key: :from_address_id
  belongs_to :address_to,foreign_key: :to_address_id
  belongs_to :to_address,foreign_key: :to_address_id
end

class Address < ApplicationRecord
  has_many :shipments
end