Ruby on rails 从ActiveRecord集合中提取特定记录的最有效方法
在我的数据库中,Ruby on rails 从ActiveRecord集合中提取特定记录的最有效方法,ruby-on-rails,ruby,activerecord,ruby-on-rails-4,Ruby On Rails,Ruby,Activerecord,Ruby On Rails 4,在我的数据库中,帐户有许多联系人 class Account < ActiveRecord::Base has_many :contacts end class Contact < ActiveRecord::Base belongs_to :account end 类帐户
帐户
有许多联系人
class Account < ActiveRecord::Base
has_many :contacts
end
class Contact < ActiveRecord::Base
belongs_to :account
end
类帐户
Contacts
有一个名为primary\u contact
的字段,它将记录表示为主要联系人。如果我需要提取某个帐户的所有联系人,并分别列出主要联系人,那么是否有一种有效的方法可以使用ActiveRecord提取此主要记录,或者我应该通过手动查看该字段的值来识别它返回的集合中的正确记录
理想情况下,我希望能够做一些类似于
帐户。主要联系人
甚至联系人。主要联系人
来识别这一点,但这不是必需的。您可以添加一个有一个关联
class Account < ActiveRecord::Base
has_many :contacts
has_one :primary_contact, class_name: 'Contact', conditions: { primary_contact: true }
end
应该给你主要联系人。主要联系人是布尔值吗?
这个答案是第一个答案,我试过了,效果很好。但是,从另一个答案来看,他使用的是范围。这种差异是因为一个绑定到Account,而另一个绑定到Contact吗?主要的区别是有关联声明您有一个主要联系人。而拥有一个范围只会给你一个范围。要获取帐户的主要联系人(假设每个帐户只有一个),您需要执行account.contacts.primary.first
操作,您可以使用帐户执行该操作。主要联系人
。是否应:主要联系人:
首先执行该操作:?
has_one :primary_contact, -> { where(primary_contact: true) }, class_name: 'Contact'
class Contact < ActiveRecord::Base
belongs_to :account
scope :primary, where( primary_contact: true )
end
account.contacts.primary