我有一个基于单个商店的权限模型。商店的成员可以查看数据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,如何使用连接表加入连接表?
答案 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