Rails - 模型疑问

时间:2011-05-22 20:36:34

标签: ruby-on-rails ruby-on-rails-3 models rails-models

鉴于我有这样的模型:

class Person
  has_many :owned_groups, :class_name => "Group", :foreign_key => :owner_id
  has_many :owned_group_memberships, :through => :owned_groups, 
              :source => :group_memberships 

  has_many :group_memberships, :foreign_key => "member_id"
  has_many :groups, :through => :group_memberships

end

class GroupMembership
  belongs_to :member, :class_name => 'Person'
  belongs_to :group
end

class Group
  belongs_to :owner, :class_name => "Person"
  has_many :group_memberships
  has_many :members, :through => :group_memberships
end

如何访问members group?我总是做@group.members或类似的事情,给我一个错误,说明在模型中找不到这种关系。

提前致谢。

## EDIT ##

我得到的错误是:Could not find the association "group_memberships" in model Group

2 个答案:

答案 0 :(得分:0)

我在一个我正在研究的网站上做了类似的事情,但这些关联与你的工作方式有点不同,但也许它会有所帮助。我认为你需要使用has_and_belongs_to_many关联来加入你的多对多关系。

在我的数据库中,我有Users,Members和UsersMembers

您不需要创建UsersMembers模型(在您的情况下为GroupMembership),但您需要一个数据库表来链接这两个模型。

#Migration
    create_table :bands_users, :id => false, :force => true do |t|
      t.integer :band_id,       :null => false
      t.integer :user_id,       :null => false
    end

#Models
  class Band < ActiveRecord::Base
    has_and_belongs_to_many :members, :class_name => 'User'
  end

  class User < ActiveRecord::Base
    has_and_belongs_to_many :bands
  end

从此我现在可以打电话给@ band.members或@ user.bands

答案 1 :(得分:0)

您可能需要指定:class_name =&gt;你的has_many:成员声明中的'人'。