1

私は2つのモデルを持っています、AddressそしてUser

class Address < ActiveRecord::Base
  belongs_to :resource, polymorphic: true
end

class User < ActiveRecord::Base
  has_one :contact_address, class_name: "Address", as: :resource
  has_one :billing_address, class_name: "Address", as: :resource
end

問題は、テーブルが別のものを指定していないため、作成billing_addressするUserと自動的にとして設定されることです(両方とも)。モデルの設定方法についてアドバイスをいただけますか?contact_addressaddressesresource_typeUser

ありがとう

4

3 に答える 3

0

請求先住所は、人よりも注文に関係していると思います。たとえば、ある注文で、職場で請求してもらい、別の注文で自宅で請求してほしい場合があります。

また、人は多くの住所を持つことができますが、住所には多くの人がいることもあります。これはネットワークであり、階層ではありません。古典的な表現:

PARTY
id
type
name

PARTY_ADDRESS
id
party_id
address_id
type {home, work}

ADDRESS
id
suite
...

ORDER
id
date
customer_party_address_id
bill_to_party_address_id

ORDER_ITEM
id
order_id
product_id
price
quantity
ship_to_party_address_id
于 2012-10-24T17:23:27.763 に答える
0

addresses簡単な方法を選択し、テーブルに別の外部キーを追加しました。その後:

has_one :contact_address, class_name: "Address", as: :resource, foreign_key: :foreign_key
于 2012-10-25T20:17:36.200 に答える
0

単一テーブル継承はあなたを助けることができます。これを機能させるには、移行によってテーブルにtype列を追加する必要がlocationsあります(すべての単一テーブル継承モデルの場合と同様)。

class Address < ActiveRecord::Base
  belongs_to :resource, polymorphic: true
end

class ContactAddress < Address
end

class BillingAddress < Address
end

class User < ActiveRecord::Base
  has_one :contact_address, as: :resource
  has_one :billing_address, as: :resource
end

価値があるので、belongs_to関係名(:resource)は少し奇妙です。多分:addressableもっと理にかなっているでしょうか?

于 2013-07-15T23:48:52.847 に答える