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

从另一个模型的数组中检索唯一的关联模型

  •  3
  • raidfive  · 技术社区  · 14 年前

    为另一个模型的子集找到多个唯一关联模型的推荐方法是什么?例如,对于一部分用户,确定他们喜欢的独特艺术家模型。

    一种方法是从数据库中抓取用户,然后对他们进行迭代,查询他们的收藏夹并构建一个唯一的数组,但是这看起来效率很低,速度也很慢。

    class User < ActiveRecord::Base
      has_many :favorites
    end
    
    class Artist < ActiveRecord::Base
      has_many :favorites
    end
    
    class Favorite < ActiveRecord::Base
      belongs_to :user
      belongs_to :artist
    end
    
    @users = User.find_by_age(26)
    # then determine unique favorited artists for this subset of users.
    
    1 回复  |  直到 14 年前
        1
  •  7
  •   Turadg    13 年前

    这个 has_many 关联有一个名为 uniq 对于此要求:

    class User < ActiveRecord::Base
      has_many :favorites
      has_many :artists, :through => :favorites, :uniq => true
    end
    
    class Artist < ActiveRecord::Base
      has_many :favorites
      has_many :users, :through => :favorites, :uniq => true
    end
    
    class Favorite < ActiveRecord::Base
      belongs_to :user
      belongs_to :artist
    end
    

    用法:

    # if you are expecting an array of users, then use find_all instead of find_
    @users = User.find_all_by_age(26, :include => :artists)
    @users.each do |user|
      user.artists # unique artists
    end
    

    编辑1

    解决方案1-:组

    Artist.all(:joins => :users, :group => :id, 
      :conditions => ["users.age = ?", 26])
    

    解决方案2-选择DISTINCT

    Artist.all(:joins => :users, :select => "DISTINCT artists.*", 
      :conditions => ["users.age = ?", 26]))