Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Array results using Active Record Query Model 'select' and 'where'

I have a user, membership and group model. A user has many memberships, and groups through memberships. A group has many memberships, and users through memberships. Memberships belongs to both.

When a user accesses the users index view I want to show him/her all users that belong to the group he/she belongs to: I created the following code, which does not work. I cannot seem to get the query to work. Pease help!

The code in the Users controller

class UsersController < ApplicationController

  def index
      @users = current_user.relevant_members
  end

end

The code in the User model

def relevant_members
  group_ids = self.group_ids
  user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")
  User.find(user_ids)
end

I don't understand why, when tested in the console, user_ids is not an array of ids, but the following array:

[#<Membership user_id: 2>, #<Membership user_id: 2>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 3>, #<Membership user_id: 2>]

What would be a better way of returning an array of user ids to find all relevant group members?

like image 938
raoul_dev Avatar asked Dec 05 '25 10:12

raoul_dev


1 Answers

Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})")

returns always an array of Membership objects, select("user_id") changes only the fields that are loaded from DB to the object.

It's enough to map it to id

user_ids = Membership.select("user_id").where("group_id IN (#{group_ids.join(", ")})").map(&:user_id)
like image 187
santuxus Avatar answered Dec 08 '25 00:12

santuxus



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!