如何将belongs_to用于相同的模型,但是用于不同的列(用于含义)

时间:2015-07-24 22:21:47

标签: ruby database activerecord rails-activerecord

我有一个模特组。

一个组可以有多个地址作为位置。它肯定有两种其他地址: 一个邮寄地址 一个用于帐单邮寄地址

所以地址也是一个模型,我如何将belongs_to归属于同一模型但是具有 多个ids?

组:       mailing_address_id       billing_address_id

各个位置由group_locations连接表很容易处理: ID GROUP_ID ADDRESS_ID

但是如何使用belongs_to作为mailing_address_id和biling_address_id ???通常是:

address_id(就像它在连接中一样)但我需要它们意味着

这是我想要将地址分成另一个表的工件,试图保持数据库相对规范化我认为它被调用。

我还有一段时间构建另一种连接表,通过位置连接表连接组中的人...但这是我在这里发布的一个难题:

https://stackoverflow.com/questions/31599419/building-a-migration-for-a-join-table-based-on-a-join-table-in-rails

3 个答案:

答案 0 :(得分:1)

class Group < ActiveRecord::Base
  belongs_to: billing_address, class: 'Address', foreign_key: 'billing_address_id'
  belongs_to: mailing_address, class: 'Address', foreign_key: 'mailing_address_id'
end

答案 1 :(得分:1)

你可以尝试:关系你的foreign_key。

here

上查找“4.1.2.5:foreign_key”部分
  

按照惯例,Rails假定用于保存外来的列   此模型上的键是带后缀_id的关联名称   添加。 :foreign_key选项允许您设置外部名称   直接关键

答案 2 :(得分:1)

地址只是一个地址所以应该得到自己的表。

某人可能位于某个地址并将其用于某个角色。

两个人可以住在同一个地址。既适合家庭,也适合工作。因此:

create table addresses (
  address_id int primary key,
  ...address info...
);

create table people (
  person_id int primary key,
  ...person info...
);

create table people_placements (
  person_id int references people(person_id),
  address_id int references addresses(address_id),
  address_role_id smallint references address_roles(address_role_id), /* definition elided */

  primary key (person_id, address_id, addres_role_id)
);

对于销售订单,您可以参考开票方和地址的people_placements表。与销售订单行项目中的装运方和地址相同。