Rails filtering array of objects by attribute value
activerecord, ruby-on-rails
Solution
Try :
This is fine :
@logos = @attachments.select { |attachment| attachment.file_type == 'logo' }
@images = @attachments.select { |attachment| attachment.file_type == 'image' }
but for performance wise you don't need to iterate @attachments twice :
@logos , @images = [], []
@attachments.each do |attachment|
@logos << attachment if attachment.file_type == 'logo'
@images << attachment if attachment.file_type == 'image'
end
Problem
So I perform a query to the db and I have a complete array of objects: ``` @attachments = Job.find(1).attachments ``` Now that I have an array of objects I don't want to perform another db query, but I would like to filter the array based on the `Attachment` object's `file_type` so that I can have a list of `attachments` where the file type is `'logo'` and then another list of `attachments` where the file type is `'image'` Something like this: ``` @logos = @attachments.where("file_type = ?", 'logo') @images = @attachments.where("file_type = ?", 'image') ``` But in memory instead of a db query.