Search code examples
ruby-on-railsactiverecordfind

How to select where ID in Array Rails ActiveRecord without exception


When I have array of ids, like

ids = [2,3,5]

and I perform

Comment.find(ids)

everything works fine. But when there is id that doesn't exist, I get an exception. This occurs generaly when I get list of IDs that match some filter and than I do something like

current_user.comments.find(ids)

This time I may have a valid comment ID, which however does not belong to given User, so it is not found and I get an exception.

I've tried find(:all, ids), but it returns all of the records.

The only way I can do it now is

current_user.comments.select { |c| ids.include?(c.id) }

But that seems to me like super inefficient solution.

Is there better way to select ID in Array without getting exception on non-existing record?


Solution

  • If it is just avoiding the exception you are worried about, the "find_all_by.." family of functions works without throwing exceptions.

    Comment.find_all_by_id([2, 3, 5])
    

    will work even if some of the ids don't exist. This works in the

    user.comments.find_all_by_id(potentially_nonexistent_ids)
    

    case as well.

    Update: Rails 4

    Comment.where(id: [2, 3, 5])