我有一个带有密钥(域)的公司模型。我有一个也有域名的联系模式。
我已成功设置这两者之间的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 的方式吗?接受建议。
答案 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。
简单地说:
Contact.most_recent_by_domain
(使用特定 SQL)has_one :most_recent_contact, -> { merge(Contact.most_recent_by_domain) }, class_name: 'Contact', primary_key: 'domain', foreign_key: 'domain'