ruby-on-rails - 可以在Ruby on Rails中描述这种关系吗?

标签 ruby-on-rails activerecord foreign-key-relationship

这是可以在Ruby on Rails的ActiveRecord模型关系中描述的关系吗?

   Customer                          Address
   ===================               =========
   Billing_Address_Id  >------}
                              }---|- AddressId
   Shipping_Address_Id >------}

这样我就可以得到如下数据:

地址:
   Id | Addr           | City     | State | Zip   |
   ================================================
   1  | 123 Main       | New York | NY    | 99999 |
   2  | 200 2nd Street | New York | NY    | 99999 |
   3  | 300 3rd Street | Albany   | NY    | 99998 |
   4  | PO Box 4       | Albany   | NY    | 99998 |

顾客:
   Id | Name | Billing_Address_Id | Shipping_Address_Id  |
   =======================================================
   1  | Bob  | 1                  | 1                    |
   2  | Al   | 2                  | 1                    |
   3  | Joe  | 3                  | 4                    |

我想将地址存储在自己的表中,因为数据可能会在客户之间共享(尤其是送货地址)。但是对于任何给定的客户,甚至只有两个地址。

除非没有其他方法,否则我想避免多对多的关系。

最佳答案

给定这样的表定义:

create_table :addresses do |t|
  t.string :street
  t.string :city
  t.string :state
  t.string :zip
  t.timestamps
end

create_table :customers do |t|
  t.string     :name
  t.references :shipping_address
  t.references :billing_address
  t.timestamps
end

您可以将帐单和送货地址与您的客户相关联,如下所示:
class Customer < ActiveRecord::Base
  belongs_to :shipping_address, :class_name => "Address"
  belongs_to :billing_address,  :class_name => "Address"
end

关于ruby-on-rails - 可以在Ruby on Rails中描述这种关系吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1734767/

相关文章:

mysql - 没有实际外键的一对多关系

ruby-on-rails - 10.minutes.ago 是使用 Time.now 还是 Time.current?

ruby-on-rails - ActiveRecord #includes, with condition, but load all relations, 而不仅仅是那些匹配条件

ruby-on-rails - Capistrano 杀死 Assets :precompile

ruby-on-rails - Rails has_and_belongs_to_many 总是插入到数据库中

ruby-on-rails - 需要帮助为我的Rails应用程序创建structure.sql

python - 如何检索通过 Django 泛型关系链接的对象并确定它们的类型?

ruby-on-rails - Rails4 安全 : Session fixation possible at all using encrypted cookies?

ruby-on-rails - 带参数回调后的 aasm