虚拟模型属性,链接到关联模型的记录

时间:2015-11-22 19:01:27

标签: ruby-on-rails model

假设我的Person模型与has_many模型有PhoneNumber关联。每个人都有几个电话号码,其中一个始终设置为该人的主号码。我通过在primary模型中添加PhoneNumber布尔列来实现此功能。

现在我想想办法获得一个人的主要号码。我已将以下方法添加到Person模型

  def primary_number
    self.phone_numbers.each{ |n|   return n if n.primary }
  end

但是我担心这段代码的性能(有和没有急切加载相关模型)。是否有更好(更快)的方法呢?

1 个答案:

答案 0 :(得分:2)

更好的方法是扩展关联:

has_many :phone_numbers do
  def primary
    where phone_numbers: { primary: true }
  end
end

然后使用:

person.phone_numbers.primary