2013-06-21 14 views
4

我得到了一個用戶模型Rails的 - 一個用戶的多個地址

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?

回答

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 
+0

應該belongs_to has_one? – fengd

+0

這個問題中的外鍵在用戶模型中。爲了在用戶模型中使用has_one,外鍵必須位於Address模型中。 – kengo

+2

用戶屬於:地址,很奇怪。 – fengd

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 

這樣你可以有嵌套表格接受運費和帳單地址的值。此外,你也會滿足你的基本要求。

+1

在這種情況下,你如何設置關聯密鑰?我們是否需要在地址模型中添加列? – kengo

+0

我認爲肯尼是正確的,該協會有點不在這裏。 –