状況
UserテーブルとPostテーブルが1対1のアソシエーションの場合。
アクティブなUserの投稿した記事のidを配列形式で取得する
post_ids = User.where(status:"active").post.pluck(:id)
こんな感じで1行で取得したいが、User.where(status:"active")は配列なのでpostを一意に識別できずエラーになる
冗長なコード
users = User.where(status:"active")
post_ids = []
users.each do |user|
post_ids.push(user.post)
end
あまりスタイリッシュじゃない、、。
map関数でリファクタリング
post_ids = User.where(status:"active").map { |u| u.post.id }
ワンラインで記載できていい感じ。
コメントを元に追記
下記でも取得できる。
User.where(status: 'active').joins(:posts).pluck('posts.id')
Another worksでは一緒に働ける仲間を探しています