在 Rails 上的 Ruby 中,如何为 "previous records" 创建 has_many 关系?
In Ruby on Rails, how can I create a has_many relation for "previous records"?
假设我有一个 User
模型和一个 Contact
模型。我在 user.rb
class 中有以下关系:
has_many :contacts
has_one :most_recent_contact, -> { order(created_at: :desc }
我看到了这个答案: 我开始思考:
如果我想添加has_many :previous_contacts
关系怎么办?
因此,如果用户有 5 个联系人,has_many :contacts
将 return 所有 5 个联系人的数组,has_one :most_recent_contact
将 return 一个联系人,并且 has_many :previous_contacts
会 return 一个包含 4 个联系人的数组。
当然,我可以用类似的东西低效地做到这一点:
def previous_contacts
contacts - [most_recent_contact]
end
但我想知道我是否可以用 has_many
关系完成同样的事情,这样读起来更好(对我来说)
想法?
您可以使用offset
跳过第一条记录:
has_many :previous_contacts, -> { order(created_at: :desc).offset(1) } ...
假设我有一个 User
模型和一个 Contact
模型。我在 user.rb
class 中有以下关系:
has_many :contacts
has_one :most_recent_contact, -> { order(created_at: :desc }
我看到了这个答案: 我开始思考:
如果我想添加has_many :previous_contacts
关系怎么办?
因此,如果用户有 5 个联系人,has_many :contacts
将 return 所有 5 个联系人的数组,has_one :most_recent_contact
将 return 一个联系人,并且 has_many :previous_contacts
会 return 一个包含 4 个联系人的数组。
当然,我可以用类似的东西低效地做到这一点:
def previous_contacts
contacts - [most_recent_contact]
end
但我想知道我是否可以用 has_many
关系完成同样的事情,这样读起来更好(对我来说)
想法?
您可以使用offset
跳过第一条记录:
has_many :previous_contacts, -> { order(created_at: :desc).offset(1) } ...