代码之家  ›  专栏  ›  技术社区  ›  ohho

命名范围不在,如何?

  •  0
  • ohho  · 技术社区  · 15 年前

    如何编写不在命名范围内的语法?例如,User:有许多照片,我如何定义:

    User.has_no_photo
    

    Photo

    2 回复  |  直到 15 年前
        1
  •  0
  •   zed_0xff    15 年前
    named_scope :has_no_photos, :conditions => [ 
      "id NOT IN ?", 
      Photo.all(:select => "distinct user_id").map(&:user_id).map(&:to_i)
    ]
    

    我假设您有一个标准的“Photo.beliento:user”关联和整数键

        2
  •  0
  •   François Beausoleil    15 年前

    class User < ActiveRecord::Base
      has_many :photos
      named_scope :has_no_photos,
        :conditions => "(SELECT COUNT(#{Photo.table_name}.*)
                         FROM #{Photo.table_name}
                         WHERE #{Photo.table_name}.user_id = #{User.table_name}.id) = 0"
    end
    

    可能有更有效的方法。一种方法是将照片计数存储在用户行上:然后查询变成简单的照片计数=0,而不是复杂的联接:

    class Photo < ActiveRecord::Base
      belongs_to :user, :counter_cache => true
    end
    
    class User < ActiveRecord::Base
      has_many :photos
      named_scope :has_no_photos, :conditions => {:photos_count => 0}
    end
    
    推荐文章