Rails范围:关联是零

时间:2015-04-18 19:36:35

标签: ruby-on-rails scope associations

在我的Rails应用中,项目可以有视频。我想为项目创建一个范围来抓取与之关联的视频的项目。我该怎么做?

以下是我的模型关联

class Project < ActiveRecord::Base
  has_one :video
end

class Video < ActiveRecord::Base
    belongs_to :project
end

5 个答案:

答案 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")