通过join_table访问has_and_belongs_to_many中的值

时间:2015-04-18 00:35:23

标签: sql ruby-on-rails database-schema

如果我有以下关系:

class Role < ActiveRecord::Base
 has_and_belongs_to_many :members, join_table: :members_roles
end 

class Member < ActiveRecord::Base
  has_and_belongs_to_many :roles, join_table: :members_roles
end

我想访问member_roles表 - 我该怎么做?在我的rails控制台中:

m=Member.new
m.member_roles.new 

or 

r=Role.new
r.member_roles.new

不起作用。基本上我想在新模型对象和角色对象之间建立新关系。我该如何设置?

如果我尝试

m=Member_role.new

我得到名字错误:

NameError: uninitialized constant Member_Role

即使在我的架构中,还有一个members_roles表:

create_table "members_roles", id: false, force: true do |t|
    t.integer "member_id"
    t.integer "role_id"
  end

我知道有一些简单的我想念,但我正在与其他人的代码合作并试图解决它 - 我从未以这种方式建立多对多的关系

1 个答案:

答案 0 :(得分:0)

如果您只想访问模型以创建新关联,但联合表上没有额外数据,您只需执行以下操作:

m = Member.create
r = Role.create

m.roles << r

这将自动在联合表中创建一个新行。

但请注意,如果您在联接表上有一些额外数据,则无法将其与habtm关联一起使用,而应使用has_many :through