取消与具有特定角色的用户的关联

大卫·坎图

我想建立一个用户有很多交易并且一个交易属于一个用户以及另一个具有角色的交易的关联(“关联”)。

我正在使用rolify宝石来做到这一点。

像这样:

# user.rb

has_many :deals
# deal.rb

belongs_to :user
belongs_to :associate # User with role 'associate or admin'

第一个属于的可以是任何用户,无论该用户是否应该继续工作都无所谓,第二个属于,但是绝对应该是关联人或管理员

您认为我应该为此使用rolify吗?还是我不应该为每个角色建立不同的模型?

更新资料

我当前的解决方案无法正常工作,因为作为关联用户的用户需要两个关联,这两个交易有很多,而则有个has_many :client_deals我不确定在命名中。

更新2

Max的解决方案效果很好!

最高

这不是您要使用Rolify表格的地方。Rolify通过roles在角色和资源之间创建一对一的关联然后,角色通过users_roles表与用户进行多对多关联

这意味着它在一对多或多对多关联的情况下非常有用,但是由于缺乏数据库约束,Rolify确实不能保证只有一个用户扮演特定角色。

图表

即使您添加了验证或其他应用程序级别的约束,也仍然可能导致双击的竞争状况。

相反,您只想创建单独的一对一关联:

class Deal < ApplicationRecord
  belongs_to :creator, 
    class_name: 'User',
    inverse_of: :created_deals
  belongs_to :associate, 
    class_name: 'User',
    inverse_of: :deals_as_associate

  validates :must_have_associate_role!

  private
  def must_have_associate_role!
    # this could just as well be two separate roles...
    errors.add(:associate, '^ user must be an associate!') unless associate.has_role?(:associate)
  end
end

class User < ApplicationRecord
  has_many :created_deals, 
    class_name: 'Deal'
    foreign_key: :creator_id,
    inverse_of: :creator
  has_many :deals_as_associate, 
    class_name: 'Deal'
    foreign_key: :associate_id,
    inverse_of: :associate
end

只要每个关联的名称都是唯一的并且您可以使用class_nameforeign_key选项正确配置,两个模型之间的关联数就可以无限增加

由于它使用单个外键,因此这意味着ere永远只能是一个,并且可以防止竞争。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何关联具有特定属性的用户和角色中的用户?网络核心2.0

获得具有特定角色的用户

具有特定角色的用户组

检查用户是否具有特定角色

具有角色的MySQL用户,角色特定字段?

检查用户是否在角色数组中具有特定角色

Laravel使用RelationShip仅获得具有特定角色的用户

不和谐.js || 具有特定角色的 dm 用户

如何检查用户在Meteor中是否具有特定角色

检查用户是否具有特定声明的角色

如果用户具有特定角色,则始终重定向

允许具有特定角色的用户访问命令

提及具有特定角色的在线用户的Discord.py

MySql:如果用户具有特定角色,则将其排除

discord.py 检查用户是否具有特定角色

.NET Core 2.1身份使所有用户具有关联角色

查找具有特定关联的用户的最佳方法

Python discord bot 用于检查所有用户的特定角色,该角色也具有特定角色

如何仅将内容登录到具有特定角色用户的用户?

允许用户创建具有特定策略/角色的IAM用户的AWS IAM策略

从WordPress管理仪表板上的用户列表中隐藏具有特定角色的用户

向具有特定角色的特定用户添加和撤消权限

登录Wordpress后如何将具有特定“角色”的用户重定向到特定页面

如何检查用户在特定服务器中是否具有特定角色

获取所有具有角色的用户

如何列出具有特定角色的所有用户的角色ID?我正在使用Discord.js Commando

如何计算ASP.NET Core 2.0中具有特定角色的所有用户

获取所有在ASP.NET Core 2.0中具有特定角色的用户

尝试删除具有特定角色的用户发送的所有消息,除非该消息为!verify