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