我正在尝试在我的控制器中创建一个具有一个或多个视频的用户的实例对象,因此有一个用户拥有许多视频。所以我有一个User.rb模型has_many:视频,我的Video.rb模型属于belongs_to:user。我想选择至少有一个视频的所有用户。
我是查询SQL的新手,因此我不确定如何连接表格,或者我是否需要。
例如:
@users = User.where(user.video not nil?)
答案 0 :(得分:3)
我想选择至少拥有一个视频的所有用户。
您需要做的就是使用joins方法
@users = User.joins(:videos)
它将检索所有具有相关视频的用户,即没有任何相关视频的用户不会成为结果的一部分,并且形成的查询将是:
SELECT users.* FROM users
INNER JOIN videos ON videos.user_id = users.id
正如@engineersmnky在此comment中指出的那样,如果您计划迭代在@users
中检索到的用户,然后再次浏览每个用户的videos
,那么它将是更好的想法是急切加载而不是joins
以避免n + 1查询问题。在这种情况下,您的代码应为:
@users = User.includes(:videos).where("videos.id IS NOT NULL")
以及Rails 4
及以上
@users = User.includes(:videos).where.not(videos: {id: nil})
答案 1 :(得分:1)
像这样的东西
User.includes(:videos).where("videos.user_id is not null")