使用Rails,如何使用连接表加入连接表?

时间:2015-04-20 17:32:09

标签: ruby-on-rails ruby join has-and-belongs-to-many

我有一个基于单个商店的权限模型。商店的成员可以查看数据has_and_belongs_to_many_users,编辑数据has_and_belongs_to_many_editors并拥有商店has_and_belongs_to_many_owners

如果我将来要添加更多权限,我将不得不添加更多联接。我不确定我喜欢这个型号。

Store has_and_belongs_to_many_users
Store has_and_belongs_to_many_owners -> [Users]
Store has_and_belongs_to_many_editors -> [Users]

另一种选择是,我将角色分解出来,并创建一个名为“授权用户”的第二个连接表。

这可能是这样的:

Store has_and_belongs_to_many_authorized_users
authorized_users: User_id Role_id

如何使用第二个连接表,即带有rails的“authorized_users”?看看我的模型,我没有一个名为authorized_users的模型,我不知道如何构建一个与连接表相关的模型。

基本上我的问题是,使用Rails,如何使用连接表加入连接表?

2 个答案:

答案 0 :(得分:1)

按照陈述的说法回答你的问题,我更愿意自己将角色放在联接表中

class User < ActiveRecord::Base
  has_many :store_users, inverse_of: :user, dependent: :destroy
  has_many :stores, through: :store_users
end

class Store < ActiveRecord::Base
  has_many :store_users, inverse_of: :store, dependent: :destroy
  has_many :users, through: :store_users
end

class StoreUser < ActiveRecord::Base
  belongs_to :store
  belongs_to :user
  has_many :permissions, dependent: :destroy, inverse_of: :store_user

  validates_presence_of :store, :user
end

class Permission < ActiveRecord::Base
  belongs_to :store_user
  validates_presence_of :role
end

答案 1 :(得分:0)

如果您需要一个可以或应该是模型的连接表,您希望使用has_many :trough关联。您可以在此处详细了解:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association