1. ホーム
  2. ruby-on-rails

[解決済み] オブジェクトの配列を属性値でフィルタリングするRails

2022-12-20 02:25:08

質問

DBにクエリを実行すると、オブジェクトの完全な配列が得られます。

@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クエリの代わりにメモリ内で

どのように解決するのですか?

試してみてください。

これは大丈夫です。

@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