我希望我的用户对象能够与许多地址相关联,并且其中一个地址是主要地址.
我试图这样做而不使用布尔来表示主要地址,而是同时使用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
我真的不明白如何正确设置这些关联或如何访问它们.非常感谢您的帮助!
最佳答案 刚刚创建了您正在使用的模型和关联.我不明白为什么它不适用于你的情况,因为我可以访问primary_address.这是我用来使用rails console访问它的代码.注意:我已经提前创建了一个用户和几个地址.
# in case if you have user with id = 1
User.find(1).primary_address
# or another example
User.first.primary_address
我不认为你的协会会允许这个电话:
user.addresses.primary_address
user.addresses.primary_address.first