2016-09-17 84 views
3

我正在构建一个Rails照片库应用程序,该应用程序允许用户创建私人图库并邀请用户以不同权限(即查看器和编辑器)访问图库。ActiveRecord与关联类型字段的多对多表 - Rails

我想到galleries_users表将需要解决许多一对多relationsip:

user_id | gallery_id 
-------------------- 
1  | 4 
-------------------- 
2  | 4 

但我应存储关联许可类型?我可以只添加一个permission字段:

user_id | gallery_id | permission 
--------------------------------- 
1  | 4   | edit 
--------------------------------- 
2  | 4   | view 

这是正确的轨道吗?

我也看到了Rolify的宝石,但使用这将意味着添加一个用户到一个画廊(通过上面的方法),并通过Rolify的界面分别添加一个角色。除非有办法,我可以跳过将用户添加到画廊并将角色视为关联的第一步?

回答

0

我认为,不要使用多对多的关系,你可以尝试一对多的关系。话虽如此,我的意思是保持所有者和画廊的关系是分开的,即不要将画廊所有者与受邀用户混合在一起,因为它可能会在将来的实施中产生问题,并尝试在另一个表中保留invite_users。

1)业主 - 画廊 - >一对多的关系

表1:用户

表2:像册

2)受邀请的用户:

表3:invited_users

你可以用像gallery_id,view_permission_user_ids_arr,edit_permission_user_ids_arr等列来创建此表格。

因此,对于每个画廊,您都可以拥有可方便查看/编辑权限的用户ID数组。

希望它可以帮助你。

+0

感谢您的回复。对不起,我忘了提及没有画廊老板。创建图库的用户应自动获得编辑权限。这意味着混合邀请用户和创作者不是问题 – slehmann36

+0

@ slehmann36 ..在这种情况下,多对多关系似乎是更好的方法。而关于权限领域,我认为需要有这样的区分因素,所以有权限的领域是必须的,或者你可能会想到两个单独的领域,如edit_permission,view_permission等,这可能会帮助你查询数据库。 –