从ActiveRecord集合中提取特定记录的最有效方法

时间:2013-08-22 15:47:11

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

在我的数据库中,Account有许多Contacts

class Account < ActiveRecord::Base
    has_many :contacts
end

class Contact < ActiveRecord::Base
    belongs_to :account
end

Contacts有一个名为primary_contact的字段,表示该记录为主要记录。在我需要为帐户提取所有联系人并单独列出主要联系人的情况下,是否有一种有效的方法可以使用ActiveRecord将此主记录拉出来,或者我应该只识别它返回的集合中的正确记录手动查看该字段的值?

理想情况下,我希望能够执行account.primary_contact甚至contacts.primary之类的操作来识别这一点,但这不是必需的。

2 个答案:

答案 0 :(得分:1)

您可以添加has_one关联

class Account < ActiveRecord::Base
  has_many :contacts
  has_one :primary_contact, class_name: 'Contact', conditions: { primary_contact: true }
end

更新:rails 4语法将是

has_one :primary_contact, -> { where(primary_contact: true) }, class_name: 'Contact'

答案 1 :(得分:1)

class Contact < ActiveRecord::Base
    belongs_to :account
    scope :primary, where( primary_contact: true )
end

然后,如果您有一个帐户:

account.contacts.primary

应该为您提供主要联系人。