我有一个User
模型,其中Contact
和Contact
属于User
。我正在尝试检索所选用户的contacts
,可以通过以下方式完成:
id = [1,2,3,4,5]
users = User.includes(:contacts).find(id)
contacts = []
users.each do |user|
contacts << user.contacts.as_json
end
render json: contacts
有没有更好的方法从contacts
数组中获取users
。其次,如何仅通过左加入用户ID而不是整个用户列来加载联系人以节省内存使用量(#select(:id)
方法除外)
答案 0 :(得分:3)
你可以让所有用户传递id数组,如:
ids = [1,2,3,4,5]
users = User.includes(:contacts).where(users: { id: ids })
但是,如果您只想要联系人,那么您可以使用与用户表的关系查询联系人表,还可以传递ID数组,例如
Contact.joins(:user).where(users: { id: [1,2,3,4,5] })
然后获取其json格式,然后使用as_json
,所以:
@contacts = Contact.joins(:user).where(users: { id: [1,2,3,4,5] }).as_json
render json: @contacts
答案 1 :(得分:2)
您只需要contacts
和render
,因为您没有使用User
为什么不:
contacts = Contact.where(user_id: user_ids)
user_ids = [1, 2, 3, 4, 5]
。