在Rails中如何获得没有孩子的记录数量(有很多关联)?

时间:2015-04-06 23:08:35

标签: ruby-on-rails

我有两个模型名albumalbumphoto

class Album < ActiveRecord::Base
    has_many :albumphotos, dependent: :destroy
end

class Albumphoto < ActiveRecord::Base
    has_many :album, dependent: :destroy
end

现在我需要获取其中没有Albums的{​​{1}}个数。我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

您的架构错误,因为它不能是双向has_many。如果照片只能属于一个相册或其他关系,例如has_manybelongs_to,如果一张照片属于不同的相册,则应使用has_many :throughhas_and_belongs_to_many。对于belongs_to,您可以使用LEFT JOIN

Album.joins('LEFT JOIN albumphotos ON albumphotos.album_id = albums.id').
    where('albumphotos.id' => nil)

对于has_many :throughhas_and_belongs_to_many,它几​​乎是相同的,但它会像albums_to_photos一样成为第三个表。

答案 1 :(得分:0)

假设您的相册表中有albumphoto_id,并且如果您的相册中没有任何相册,则表示相册表中的albumphotos_id = nil,则可以执行此操作

Album.where(albumphotos_id: nil).count