使用 Rails,如何将连接 table 与连接 table 连接?

Using Rails, How can I join a join table with a join table?

我有一个基于单个商店的权限模型。商店有一个成员可以查看数据 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]

另一种方法是,我提取出角色,并创建第二个连接 table,名为 "authorized users"。

这可能是这样的:

Store has_and_belongs_to_many_authorized_users
authorized_users: User_id Role_id

如何使用第二个联接 table,即 "authorized_users" 和 rails?查看我的模型,我没有名为 authorized_users 的模型,而且我不确定如何构建与联接 table 相关的模型。

基本上我的问题是,对于 Rails,我如何加入一个连接 table 和一个连接 table?

只是按照说明回答你的问题,我更愿意将角色加入 table 我自己

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

如果您需要一个连接 table,可以或应该是一个模型,您想要使用 has_many :trough 关联。您可以在这里阅读更多相关信息:http://guides.rubyonrails.org/association_basics.html#the-has-many-through-association