代码之家  ›  专栏  ›  技术社区  ›  Denis Hennessy

使用has_many时,在给定两个实体的情况下找到连接模型的最简单方法是什么:通过

  •  3
  • Denis Hennessy  · 技术社区  · 16 年前

    has_many :through

    class Group < ActiveRecord::Base
        has_many :memberships
        has_many :members, :through => :memberships
    end 
    
    class Member < ActiveRecord::Base
        has_many :memberships
        has_many :groups, :through => :memberships
    end 
    

    create_table :memberships do |t|
      t.integer :group_id
      t.integer :member_id
      t.boolean :admin
    
      t.timestamps
    end
    

    membership = @member.memberships.find_by_group_id(@group.id)
    

    find_by_group_id

    2 回复  |  直到 16 年前
        1
  •  4
  •   eggdrop    16 年前

    避免使用辅助方法,您可以编写:

      @member.admin?(@group)
    

    像这样的东西(未经测试!)。

      class Member < ActiveRecord::Base
    
        has_many :memberships
        has_many :groups, :through => :memberships
        named_scope :admin?, :through => :memberships, 
        lambda {|group|:conditions=> ["admin = 'true' and group_id = ?"], group.id }
      end
    
        2
  •  4
  •   eggdrop    16 年前

    你可以问:

      @member.is_admin?(@group)
    

      class Member < ActiveRecord::Base
    
        has_many :memberships
        has_many :groups, :through => :memberships
    
        def is_admin?(group)
          memberships.find_by_group_id(group.id).admin?
        end
    
      end