用户的活动记录关联,并且具有许多地址,其中一个地址标记为主要

时间:2011-08-23 13:42:19

标签: ruby-on-rails ruby-on-rails-3 activerecord

我正在设置我的导轨模型,我有一个User,他们有很多addresses,但其中一个是他们的主要地址。我希望能够像User.first.primary_address_idUser.first.primary_address一样访问它,以获取相关的Address模型。

是否有“轨道方式”来设置它?

我知道我可以为primary_address_id创建一个User字段,并在AR回调中填充它。但这不会让我做User.first.primary_address

之类的事情

或者我可以创建“User has_many Addresses”以及“User has_one Address”吗?或类似的东西?

2 个答案:

答案 0 :(得分:1)

  

我知道我可以为User创建一个primary_address_id字段并在AR回调中填充它。但这不会让我做像User.first.primary_address

这样的事情

这是正确的方法。

User.first.primary_address

如果有第一个用户的主要地址,则返回第一个用户的主要地址;如果没有,则返回nil。

#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

答案 1 :(得分:0)

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

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

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

因为,primary_address方法是一个实例方法,它允许你做

User.first.primary_address