user
has_many devices
.
編集:フィールドdevice
がありますregistration_id
registration_id
特定のユーザーがフォローしているユーザーのすべてのデバイスの配列を取得したいと考えています。
私はしようとしています:
@user.followers.join(:devices).select("devices.registration_id")
しかし、それはうまくいくようですが、どうすればこのクエリを実行できますか?
user
has_many devices
.
編集:フィールドdevice
がありますregistration_id
registration_id
特定のユーザーがフォローしているユーザーのすべてのデバイスの配列を取得したいと考えています。
私はしようとしています:
@user.followers.join(:devices).select("devices.registration_id")
しかし、それはうまくいくようですが、どうすればこのクエリを実行できますか?
よくわかりませんが、これでうまくいくはずです:
@user.followers.map { |f| f.devices.pluck(:registration_id) }.flatten
upd : クエリ数を最小限に抑えるために、次のソリューションを提供できます。
Device.where(user_id: @user.followers.pluck(:id)).pluck(:registration_id)
@user.followers.join(:devices).select("devices.registration_id")
.joinの後にenを追加すると機能するはずです。.joins( "devices")と呼ばれます
デバイスと登録の間の関連付けを再確認することをお勧めします
Device
belongs_to :user
has_one :registration #but in this case the device_id should be in Registration
registration_id が Device のフィールドであると考える
arr = @user.followers.collect(&:id)
@user.devices.collect{|d| d.registration_id if arr.include?d.follower_id}
try by swapping
@user.select("devices.registration_id").followers.join(:devices)