高级DataMapper搜索多对多关系

时间:2012-07-05 16:17:23

标签: datamapper ruby-datamapper

在DataMapper文档中提供Tag/Photo exemple

 class Photo
   include DataMapper::Resource

   property :id, Serial

   has n, :taggings
   has n, :tags, :through => :taggings
 end

 class Tag
   include DataMapper::Resource

   property :id, Serial

   has n, :taggings
   has n, :photos, :through => :taggings
 end

 class Tagging
   include DataMapper::Resource

   belongs_to :tag,   :key => true
   belongs_to :photo, :key => true
 end

我想选择所有没有照片的标签 我知道我可以做到

Tag.select { |tag| tag.photos.size < 1}

但我想要更多Datamapper语法。像

这样的东西
Tag.all :photos.count.lt => 1  #not works

有办法做到这一点吗? 有谁知道高级查询的一个很好的Datamapper文档? Documentation at the site非常好,但太基本了。

TKZ

2 个答案:

答案 0 :(得分:0)

Tag.all(:photos => nil)将在2个SQL查询中获得您想要的内容。 如果您更喜欢一个复杂查询,则必须编写自定义SQL并使用repository(:default).adapter.select('SELECT ...')

执行它

答案 1 :(得分:0)

试试这个:

Tag.photos.all(:count.lt => 1)