0

userhas_many devices.

編集:フィールドdeviceがありますregistration_id

registration_id特定のユーザーがフォローしているユーザーのすべてのデバイスの配列を取得したいと考えています。

私はしようとしています:

@user.followers.join(:devices).select("devices.registration_id")

しかし、それはうまくいくようですが、どうすればこのクエリを実行できますか?

4

4 に答える 4

1

よくわかりませんが、これでうまくいくはずです:

@user.followers.map { |f| f.devices.pluck(:registration_id) }.flatten

upd : クエリ数を最小限に抑えるために、次のソリューションを提供できます。

Device.where(user_id: @user.followers.pluck(:id)).pluck(:registration_id)
于 2012-10-09T11:25:55.447 に答える
0
@user.followers.join(:devices).select("devices.registration_id")

.joinの後にenを追加すると機能するはずです。.joins( "devices")と呼ばれます

于 2012-10-09T13:39:08.723 に答える
0

デバイスと登録の間の関連付けを再確認することをお勧めします

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}
于 2012-10-09T11:54:27.257 に答える
0
     try by swapping
        @user.select("devices.registration_id").followers.join(:devices)
于 2012-10-09T11:26:50.650 に答える