4

我有一个用户模型

class User < ActiveRecord::Base
    attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_id; :billing_address_id
end

和地址模型

class Address < ActiveRecord::Base
    attr_accessible :country_id, :city, :plz, :street, :streetnr, :first_name, :last_name
end

我想通过活动记录关联做什么:每个用户都有一个 billing_address 和一个 shipping_address。我可以创建一个关系,以便我可以访问这些类似 user.billing_address 吗?

4

2 回答 2

6

您可以在 belongs_to 关联中添加类名和外键。

class User < ActiveRecord::Base
    attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_id; :billing_address_id
    belongs_to :billing_address, class_name: :Address, foreign_key: :billing_address_id
    belongs_to :shipping_address, class_name: :Address, foreign_key: :shipping_address_id
end

然后你可以访问像这样的地址

user.billing_address
user.shipping_address
于 2013-06-21T01:14:28.477 回答
1

@kengo 提到的方法应该有效,但更正确的方法是

class User < ActiveRecord::Base
  attr_attr_accessible :email, :password, :password_confirmation, :remember_me, :first_name, :last_name, :shipping_address_attributes; :billing_address_attributes
  has_one :billing_address, :class_name => 'Address'
  has_one :shipping_address, :class_name => 'Address'
  accepts_nested_attributes_for :billing_address
  accepts_nested_attributes_for :shipping_address
end

通过这种方式,您可以使用嵌套表单来接受您的送货地址和帐单地址的值。此外,您也将满足您的基本要求。

于 2013-06-21T10:23:33.663 回答