Rails从对象数组关联模型

时间:2017-09-20 13:11:05

标签: ruby-on-rails activerecord

我有一个User模型,其中ContactContact属于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)方法除外)

2 个答案:

答案 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)

您只需要contactsrender,因为您没有使用User为什么不:

contacts = Contact.where(user_id: user_ids)

user_ids = [1, 2, 3, 4, 5]