Ruby on rails 用户的活动记录关联,并具有多个地址,其中一个地址标记为主地址

Ruby on rails 用户的活动记录关联,并具有多个地址,其中一个地址标记为主地址,ruby-on-rails,ruby-on-rails-3,activerecord,Ruby On Rails,Ruby On Rails 3,Activerecord,我正在尝试设置rails模型,其中我有一个用户,他们有许多地址,但其中一个是他们的主地址。我希望能够像这样访问它,User.first.primary\u address\u id和User.first.primary\u address以获取相关的地址模型 是否有“rails方式”来设置此功能 我知道我可以为User创建一个primary\u address\u id字段,并将其填充到AR回调中。但这不允许我做类似于User.first.primary\u address 或者我可以创建“用户

我正在尝试设置rails模型,其中我有一个
用户
,他们有许多
地址
,但其中一个是他们的主地址。我希望能够像这样访问它,
User.first.primary\u address\u id
User.first.primary\u address
以获取相关的
地址
模型

是否有“rails方式”来设置此功能

我知道我可以为
User
创建一个
primary\u address\u id
字段,并将其填充到AR回调中。但这不允许我做类似于
User.first.primary\u address

或者我可以创建“用户有多个地址”和“用户有一个地址”这样的关联吗??还是类似的

我知道我可以为用户创建一个主地址id字段,并将其填充到AR回调中。但这不允许我做像User.first.primary\u地址这样的事情

这是正确的方法

User.first.primary_address
如果第一个用户有一个主地址,则返回第一个用户的主地址;如果没有,则返回零

#user.rb
has_one :primary_address

#address.rb
attr_accessor :primary #this allows you to have a primary field of the address form

after_save :check_if_primary

def check_if_primary
   user.update_attribute(:primary_address, self) if primary
end
我知道我可以为用户创建一个主地址id字段,并将其填充到AR回调中。但这不允许我做像User.first.primary\u地址这样的事情

这是正确的方法

User.first.primary_address
如果第一个用户有一个主地址,则返回第一个用户的主地址;如果没有,则返回零

#user.rb
has_one :primary_address

#address.rb
attr_accessor :primary #this allows you to have a primary field of the address form

after_save :check_if_primary

def check_if_primary
   user.update_attribute(:primary_address, self) if primary
end

一种简单的方法是在地址模型中有一个primary_address布尔列

要访问用户的主地址对象,可以在用户模型中定义主地址方法:

class User < ActiveRecord::Base
  def primary_address
    addresses.where(:primary_address => true).first
  end
end

一种简单的方法是在地址模型中有一个primary_address布尔列

要访问用户的主地址对象,可以在用户模型中定义主地址方法:

class User < ActiveRecord::Base
  def primary_address
    addresses.where(:primary_address => true).first
  end
end

我在哪里定义它以及它是如何关联的?您可以将它定义为一个has-one关系。您在哪里定义它取决于您的用例,但是如果您将它定义为地址保存的一部分,那么您使用回调是正确的。检查我的编辑。我在哪里定义它以及它是如何关联的?您可以将它定义为一个has-one关系。您在哪里定义它取决于您的用例,但是如果您将它定义为地址保存的一部分,那么您使用回调是正确的。检查我的编辑。