我會直截了當:
我有這兩個模型:
UserFollowed
該Followed模型有
user_id(跟隨另一個用戶的用戶)和followed_id, 用戶后面跟著 的用戶user_id。
User模型如下所示:
has_many :followeds, foreign_key: :followed_id, dependent: :destroy
Followed模型看起來像這樣
belongs_to :user
我想要實作的是:我想檢索current_user(登錄用戶)的關注者。
我對我應該做什么有一些想法,就像這樣:
1 - 連接users表與followeds表
2 - 選擇用戶在哪里users.id = followeds.user_id(關注的用戶current_user)
3 - 和(條件)followeds.followed_id = current_user.id(被關注的用戶是current_user,登錄的用戶)
我不知道它是否有幫助,但以下查詢是我成功使用的查詢(在堆疊溢位用戶的幫助下)來檢索用戶關注的用戶:
@users = User.joins(:followeds).where(followeds: {user_id: current_user.id})
基于此,我認為查詢應該類似于
@users = User.joins(:followeds).where(followeds: {followed_id: current_user.id})
然后是一些要選擇的查詢users.id = followeds.user_id
uj5u.com熱心網友回復:
如果我清楚地了解你的聯想
User.where(id: Followed.select(:user_id).where(followed_id: current_user.id))
它會生成類似這樣的 SQL
SELECT * FROM users
WHERE id IN (
SELECT user_id FROM followeds
WHERE followed_id = <current_user_id>
);
您還可以使用和選項添加與User模型的關聯:source:through
has_many :followers, through: :followeds, source: :user
而不僅僅是
current_user.followers
這將生成這樣的查詢
SELECT * FROM users
INNER JOIN followeds ON users.id = followeds.user_id
WHERE followeds.followed_id = <current_user_id>;
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/516608.html
標籤:sql轨道上的红宝石红宝石PostgreSQL活动记录
