在我的Rails应用中,项目可以有视频。我想为项目创建一个范围来抓取不与之关联的视频的项目。我该怎么做?
以下是我的模型关联
class Project < ActiveRecord::Base
has_one :video
end
class Video < ActiveRecord::Base
belongs_to :project
end
答案 0 :(得分:2)
现在就面对这一点,这对我有用:
Project.includes(:video).where(videos: { id: nil })
诀窍是使用includes
中的单数和where
中的复数
答案 1 :(得分:2)
根据 messanjah 的回答,您将其转换为范围的方式如下:
class Project < ActiveRecord::Base
has_one :video
scope :videoless, -> { left_joins(:videos).where("videos.id IS NULL") }
end
class Video < ActiveRecord::Base
belongs_to :project
end
答案 2 :(得分:0)
我认为这应该有效:Project.where.not(id: Video.select(:project_id).uniq)
。如果项目有一个独特的视频,也许您不需要uniq
。
答案 3 :(得分:0)
你应该试试这个 Project.joins(:video).where('videos.id IS NULL')
答案 4 :(得分:0)
使用LEFT连接并选择连接id为空的行。
Project.joins("LEFT JOIN videos ON videos.project_id = projects.id").
where("videos.id IS NULL")