3
我希望我的用戶對象能夠與許多地址關聯,並且這些地址之一是主地址。使用a有很多,並且在同一模型上有一個關聯
我試圖做到這一點,而不使用布爾值來表示主地址,而是同時使用has-many和has-one關聯 - 按照PinnyM在以下SO中的第一種方法:Rails model that has both 'has_one' and 'has_many' but with some contraints
但我似乎無法得到它的工作。
我的遷移:
class User < ActiveRecord::Migration
def change
create_table(:users) do |t|
t.integer :primary_address_id
t.string :name
end
end
end
class Address < ActiveRecord::Migration
def change
create_table(:addresses) do |t|
t.integer :user_id
t.string :address
end
end
end
我的模型:
class User
has_many :addresses
has_one :primary_address, :class_name => "Address"
end
class Address
belongs_to :user
has_one :user
end
這讓我做user.addresses使用的has_many關聯,但我似乎無法訪問到了一個協會。我試過了:
user.primary_address
user.addresses.primary_address
user.addresses.primary_address.first
我真的不明白如何正確設置這些關聯或如何訪問它們。將不勝感激您的幫助!
啊是有道理的。我只是錯誤地訪問它們。我不太瞭解設置主地址的has_one關聯。爲什麼用戶和地址模型中都有一個has_one?地址上的has_one和用戶上的belongs_to對我來說會更有意義。任何想法爲什麼這樣設置? – user3711600 2014-09-25 03:41:04
實際上,在這種特殊情況下,你並不需要在Address模型中使用has_one。您需要belongs_to才能執行類似Address.first.user(訪問該用戶的地址所屬的用戶),但has_one不是必需的。測試時我沒有使用它。這也是因爲並非每個地址都將成爲主要地址。 – sapojnik 2014-09-25 04:09:13