最近has_man来自has_many

时间:2016-07-28 22:05:54

标签: ruby-on-rails ruby ruby-on-rails-4 relationship has-many

我有一个带有密钥(域)的公司模型。我有一个也有域名的联系模式。

我已成功设置这两者之间的has_many关系。

has_many :contacts, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain'

每个联系人都有一个date字段。我想要一种能让我从date关系中获得最新联系(contacts)的关系。

这可能吗?

我知道我可以做类似的事情:

def most_recent_contact
  contacts.order('date desc null last').first
end

这是最好的方法吗?它是 rails 的方式吗?接受建议。

2 个答案:

答案 0 :(得分:1)

嗯,这似乎是单向的,但它并没有“重用”这种关系(重复它)......

has_many :contacts, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain'
has_one  :most_recent_contact, -> { order date:  :desc }, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain'

答案 1 :(得分:0)

Stephen Karger 以 (恕我直言) 最佳和可靠的解决方案进入https://www.salsify.com/blog/engineering/most-recent-by-group-in-rails

简单地说:

  1. 创建范围 Contact.most_recent_by_domain(使用特定 SQL)
  2. 将该范围合并到 has_one :most_recent_contact, -> { merge(Contact.most_recent_by_domain) }, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain'