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