104

したがって、データベースに対してクエリを実行すると、オブジェクトの完全な配列が得られます。

@attachments = Job.find(1).attachments

オブジェクトの配列ができたので、別のデータベースクエリを実行したくありませんが、Attachmentオブジェクトに基づいて配列をフィルタリングして、ファイルタイプがどこにあるかのリストと別の場所のfile_typeリストを取得したいと考えていますファイルの種類はattachments'logo'attachments'image'

このようなもの:

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

ただし、dbクエリではなくメモリ内。

4

6 に答える 6

182

試す :

これは問題ありません:

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

ただし、パフォーマンスに関しては、@ attachmentsを2回繰り返す必要はありません:

@logos , @images = [], []
@attachments.each do |attachment|
  @logos << attachment if attachment.file_type == 'logo'
  @images << attachment if attachment.file_type == 'image'
end
于 2012-04-09T11:16:39.460 に答える
10

添付ファイルが

@attachments = Job.find(1).attachments

これは添付オブジェクトの配列になります

select メソッドを使用して、file_type に基づいてフィルタリングします。

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

これにより、db クエリはトリガーされません。

于 2012-04-09T10:22:18.410 に答える
2

熱心な読み込みを試しましたか?

@attachments = Job.includes(:attachments).find(1).attachments
于 2012-04-09T07:07:58.487 に答える