VegaStudios VegaStudios -4 years ago 98
Ruby Question

Rails Fetching group_id From Another Table

In the User model, I have an archive! method that is called when a User is destroyed.

A User has many User Groups which should be stored in a new ArchivedUserGroup table when a User is destroyed.

The ArchivedUser is successfully created, but I am having trouble fetching the Users'

from the UserGroup table.

group_id: UserGroup.where(:user_id =>

Thanks for anyone that has helped me, I am just getting started with Rails and working with a rather complex codebase.

Answer Source

Since there are many UserGroup records for each user and an ArchivedUserGroup has the same attributes as a regular UserGroup (user_id, group_id), I think you should be created an ArchivedUserGroup for each of the users UserGroup records and not just one. You're trying to pass a set (like an array) to the group_id column. Although you haven't shown your schema, probably group_id is an integer since it's a foreign key, so there's a data type mismatch. Instead you could do this:

UserGroup.where(user_id: do |user_group|
    group_id: user_group.group_id

In case some users have a large number of user groups, this may be slow because there's a DB call (create) happening in an iteration. This is known as an N+1 query and the way around it in this case would be to use a bulk insert, either via raw SQL or something like the bulk_insert gem.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download