Rails has_and_belongs_to_many的ActiveRecord关系

时间:2016-11-04 14:20:19

标签: ruby-on-rails ruby activerecord

Rails中的正确关系对于此设置是什么:

users
  id
  name
  email

roles
  id
  name

permissions
  id
  name

users_roles
  id
  user_id
  role_id

roles_permissions
  id
  role_id
  permission_id

然后我有以下模型:

class User < ActiveRecord::Base
end

class Role < ActiveRecord::Base
  has_and_belongs_to_many :users, :join_table => 'users_roles'
end

class Permission < ActiveRecord::Base
  has_and_belongs_to_many :roles, :join_table => 'roles_permissions'
end

这是对的吗?当我尝试访问时:

@user = User.find(params[:id])
@user.roles

我收到错误:undefined method 'roles' for #<User:0x007fc0176c6b08>

所以似乎关系设置不正确。

1 个答案:

答案 0 :(得分:1)

  

所以似乎关系设置不正确。

  1. 您没有添加关联:)

    class User < ActiveRecord::Base
      has_and_belongs_to_many :roles, :join_table => 'users_roles'
    end
    
  2. 连接表命名约定是按字母顺序排列的 - 应该是roles_users - 如果更改它,则不必指定join_table option