Rails按属性值过滤对象数组

所以我执行查询到数据库,我有一个完整的对象数组:

@attachments = Job.find(1).attachments 

现在我有一个对象数组,我不想执行另一个数据库查询,但我想根据Attachment对象的file_type过滤数组,所以我可以有一个attachments列表,其中的文件types是'logo'然后是文件types为'image'另一个attachments列表

像这样的东西:

 @logos = @attachments.where("file_type = ?", 'logo') @images = @attachments.where("file_type = ?", 'image') 

但在内存,而不是一个数据库查询。

干杯

试试:

这可以 :

 @logos = @attachments.select { |attachment| attachment.file_type == 'logo' } @images = @attachments.select { |attachment| attachment.file_type == 'image' } 

但是为了性能,不需要重复@attachments两次:

 @logos , @images = [], [] @attachments.each do |attachment| @logos << attachment if attachment.file_type == 'logo' @images << attachment if attachment.file_type == 'image' end 

如果你的附件是

 @attachments = Job.find(1).attachments 

这将是附件对象的数组

使用select方法根据file_type进行过滤。

 @logos = @attachments.select { |attachment| attachment.file_type == 'logo' } @images = @attachments.select { |attachment| attachment.file_type == 'image' } 

这不会触发任何数据库查询。

你尝试过急于加载?

 @attachments = Job.includes(:attachments).find(1).attachments